【问题标题】:Why javac not checks the undeclared TypeParameter in this case?为什么 javac 在这种情况下不检查未声明的 TypeParameter?
【发布时间】:2021-06-28 05:32:11
【问题描述】:

有一个关于 Java 泛型的问题。请看以下代码。

class Beta{
    
    public void hello(){}
}
class Alpha {
    public <Anything> void greet(Beta beta) {
        beta.hello();
    }

}

greet() 方法中,&lt;Anything&gt; 没有在任何地方声明。为什么javac在这种情况下不会抛出任何错误?

【问题讨论】:

  • 为什么会报错?

标签: java javac


【解决方案1】:

&lt;Anything&gt; 的唯一出现是它的声明。 它被声明为方法的范围,但从未使用过。

以 Java 语言规范中的以下示例作为泛型方法:

class CollectionConverter {
<T> List<T> toList(Collection<T> c) {...}
}

第一个&lt;T&gt; 声明类型参数。第二个和第三个使用它作为返回类型和参数类型。

您的示例基本上只是第一个&lt;T&gt; 没有实际使用。有点奇怪,但不是问题。

【讨论】:

  • 那么同理public &lt;Anything extends Integer&gt; void greet(Beta beta)也有效?
  • 当然。 123456789
猜你喜欢
  • 2020-05-16
  • 1970-01-01
  • 2010-10-16
  • 2017-01-07
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
相关资源
最近更新 更多