以下声明:
URLClassLoader ucl = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class<URLClassLoader> uclc = ucl.getClass();
失败并出错:
Type mismatch: cannot convert from Class<capture#2-of ? extends URLClassLoader> to Class<URLClassLoader>
为什么我需要一个演员?
我发现有几篇文章解释了为什么你不能做相反的事情(把t赋给a),但这很明显,也很容易理解。
注意:我是在EclipseLuna下编写的,所以我不知道这是Luna的怪癖还是泛型中有什么我真的不明白的地方。
最佳答案
Covariance vs contravariance vs invarianceClass<? extends URLClassLoader>
是不变的。
因此,Class<? extends URLClassLoader>
不是Class<URLClassLoader>
的子类型
在Java中,变量可以保存同一类型或子类型实例的引用。
因此,
Class<URLClassLoader> uclc = ucl.getClass();
无效。
另一方面,
Class<? extends URLClassLoader> uclc = ucl.getClass();
将是有效的。
关于java - 为什么不能分配I <?将Type>扩展为<Type>?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52599206/