2 java generics method-invocation
如果我们有通用方法
class SClass{
public static <T> ArrayList<T> listFactory(){ return new ArrayList<T>(); }
}
Run Code Online (Sandbox Code Playgroud)
我们可以T在调用此方法时定义type-parameter explicit.
SClass.<?>listFactory();//compile error
SClass.<List<?>>listFactory();//ok
Run Code Online (Sandbox Code Playgroud)
为什么我们不能listFactory用类型参数调用?,但可以用List<?>?
方法调用的规则在Java语言规范中描述.在这种情况下,我们感兴趣
方法调用表达式用于调用类或实例方法.
Run Code Online (Sandbox Code Playgroud)[...] TypeName . NonWildTypeArguments Identifier ( ArgumentListopt )
<?>是野生型,<List<?>>不是.
至于原因,请考虑一下
SClass.<?>listFactory();//compile error
Run Code Online (Sandbox Code Playgroud)
还有什么比你即使做<?>的listFactory()??不明.你无法做到
new ArrayList<?>();
Run Code Online (Sandbox Code Playgroud)
因为JLS禁止它
如果类实例创建表达式中使用的任何类型参数是通配符类型参数(第4.5.1节),则为编译时错误.
但你也不能用它来做任何其他事情.
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |