Java 泛型推导
有类定义如下
class MyClass<A> {
public <B> MyClass(A a, B b) {
System.out.println(a + ", " + b);
}
}
实例化该类:
MyClass<String> a = new <Integer>MyClass<String>("a", 1);
编译正常。
但是如果这么写
MyClass<String> b = new <Integer>MyClass("a", 1);
编译报错: Type arguments given on a raw method。(JDK6)
这么写
MyClass<String> b = new <Integer>MyClass<>("a", 1);
编译报错:Cannot use diamonds with explicit type parameters for constructor。(JDK8)
这是什么原因呢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
翻译软件了解下
构造方法里不能与参数相关的类型推断
泛型类的泛型构造方法,调用时需要指定两个类型,而其它情况只需要指定一个类型。
当需要指定两个类型时,类的参数类型要优先于构造方法的参数类型,即只指定类的参数类型,不指定方法的参数类型,而不能只指定方法的参数类型,不指定类的参数类型。
根据类型推导,方法的参数类型可以省略,包括<>。类的参数类型可以省略,但<>不能省略。
以上只是推断,没有找到相关资料能够证明。