Java 泛型推导

发布于 2022-09-13 01:11:36 字数 626 浏览 51 评论 0

有类定义如下

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

女皇必胜 2022-09-20 01:11:36

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

巾帼英雄 2022-09-20 01:11:36

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文