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)

这是什么原因呢

阅读 1.9k
2 个回答

翻译软件了解下
构造方法里不能与参数相关的类型推断

泛型类的泛型构造方法,调用时需要指定两个类型,而其它情况只需要指定一个类型。
当需要指定两个类型时,类的参数类型要优先于构造方法的参数类型,即只指定类的参数类型,不指定方法的参数类型,而不能只指定方法的参数类型,不指定类的参数类型。
根据类型推导,方法的参数类型可以省略,包括<>。类的参数类型可以省略,但<>不能省略。

以上只是推断,没有找到相关资料能够证明。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏