这是我的问题:给出这些课程
class A {}
class B extends A {}
Run Code Online (Sandbox Code Playgroud)
此代码编译:
List<Class<? extends A>> list = Arrays.asList(B.class, A.class);
Run Code Online (Sandbox Code Playgroud)
而这不是:
List<Class<? extends A>> anotherList = Arrays.asList(B.class);
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?
更新:此代码在Java 8中编译.显然,由于"改进的类型推断".
mil*_*ose 14
在第一个例子中,推断的Arrays.asList()调用类型List<Class<? extends A>>显然是可分配给相同类型的变量.
在第二个例子中,右侧的类型是List<Class<B>>.虽然Class<B> 是分配给Class<? extends A>,List<Class<B>> 不分配给List<Class<? extends A>>.它可以分配给List<? extends Class<? extends A>>.
其原因与a List<B>无法分配的原因相同List<A>.如果是,它将使以下(非类型安全)代码成为可能:
List<Class<B>> bb = new ArrayList<B>();
List<Class<? extends A>> aa = bb;
aa.add(A.class);
Run Code Online (Sandbox Code Playgroud)
这将编译:
List<Class<? extends A>> numbers = Arrays.<Class<? extends A>>asList(B.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
670 次 |
| 最近记录: |