java – 在新建的构造函数中调用类型参数的目的是什么?
发布时间:2020-12-14 05:07:11 所属栏目:Java 来源:网络整理
导读:在 Java规范( http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.9)中,new具有以下形式: ClassInstanceCreationExpression ::=| new TypeArguments_opt TypeDeclSpecifier TypeArgumentsOrDiamond_opt ( ArgumentListopt ) ClassBodyop
在
Java规范(
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.9)中,new具有以下形式:
ClassInstanceCreationExpression ::= | new TypeArguments_opt TypeDeclSpecifier TypeArgumentsOrDiamond_opt ( ArgumentListopt ) ClassBodyopt | Primary . new TypeArguments_opt Identifier TypeArgumentsOrDiamond_opt ( ArgumentListopt ) ClassBodyopt 新的第一个可选类型参数列表的目的是什么?我无法从我阅读的第15.9节(所有引用类型参数列表的引用看起来都引用了类型/标识符之后的列表).测试标准Java编译器上的随机位会产生混乱的结果: public class Foo<T> { } // ... Foo<Integer> t1 = new <Integer> Foo<Integer>(); // works Foo<Integer> t2 = new <Integer> Foo(); // works -- unchecked warning missing the type arg after Foo Foo<Integer> t3 = new <Boolean> Foo<Integer>(); // works Foo<Integer> t4 = new <Float,Boolean> Foo<Integer>(); // works Foo<Integer> t5 = new <NotDefined> Foo<Integer>(); // fails -- NotDefined is undefined 在这些简单的例子上,似乎这个第一个参数列表没有任何意义,尽管它解析和检查其参数的有效性. 解决方法
构造函数也可以声明类型参数
public class Main { public static class Foo<T> { public <E> Foo(T object,E object2) { } } public static void main(String[] args) throws Exception { Foo<Integer> foo = new <String> Foo<Integer>(1,"hello"); } } 这就是< String>在构造函数调用之前是为.它是构造函数的类型参数. 下列 Foo<Integer> foo = new <String> Foo<Integer>(1,new Object()); 失败了
在你的最后 Foo<Integer> t5 = new <NotDefined> Foo<Integer>(); // fails -- NotDefined is undefined NotDefined不是在编译期间找到的类型.如果是,它只会给你一个警告,它没有使用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |