【问题标题】:What does this method mean? What's <V> after static? [duplicate]这个方法是什么意思?静态之后的 <V> 是什么? [复制]
【发布时间】:2014-11-07 15:54:27
【问题描述】:

我刚刚浏览了一些代码,我看到了以下方法

  public static <V> Set<V> newHashSet() {
    return new HashSet<V>();
  }

static关键字后面的&lt;V&gt;是什么意思? Set&lt;V&gt; 是什么意思?我用过字符串等类型的集合,但是&lt;V&gt; 是什么?

【问题讨论】:

  • 寻找Java generics
  • 不 > 表示泛型?
  • &lt;?&gt; 表示通配符,如果我没记错的话,它在技术上的意思是“?扩展对象”。

标签: java


【解决方案1】:

V 用于泛型。如果你写

// ClassName is the class newHashSet is declared in
ClassName.<String>newHashSet();

它会和它一样工作

ClassName.<Integer>newHashSet();

通过这种方式,您可以将此方法重复用于不同的类型。 它被称为泛型。

Set 是函数返回的内容。 静态意味着函数属于一个类,而不是该类的实例。

【讨论】:

  • 我不能只使用 newHashSet>
  • @Radiodef 实际上是次要语法细节。
  • 我已经更正了你的语法。以后在写答案的时候,一定要确保自己是正确的。
【解决方案2】:

它指定了在这个方法中使用的泛型类型。由于该方法是静态的,因此它不会使用为该类指定的任何泛型——因为实际上没有类,当它归结为编译器时。因此,对于使用泛型的静态方法,泛型类型必须在返回类型之前声明。

【讨论】:

  • “由于该方法是静态的,它不会使用为该类指定的任何泛型” 抱歉,这没有任何意义。我认为您没有正确理解静态和/或泛型,或者我误解了您。
  • @m0skit0: class A&lt;T&gt; { public static void foo(T t) { ; } } 不会编译,因为类型 T 在方法 foo 中是未知的。 (对不起,无法在评论中更好地格式化)
  • 好的,我明白了,是的,你是对的。但这不是问题:)
猜你喜欢
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
相关资源
最近更新 更多