[英]Java Class class as a generic doesn't work as expected
关于类及其泛型语义的一个简单问题。 为什么以下代码不起作用?
Class<Serializable> s = String.class;
Java告诉我Class<Serializable>
和Class<String>
不兼容。 当String
实现Serializable
时,它们怎么可能?
泛型不应该完全允许这种类型的事情吗?
不,泛型明确不允许这种事情。 经典示例是某种收集类。 如果ArrayList<String>
是ArrayList<Serializable>
的子类,则可以编写
ArrayList<String> astr = new ArrayList<String>();
ArrayList<Serializable> aser = astr;
aser.add(new Integer());
// This will throw ClassCastException!
String str = astr.get(0);
在此代码之后,您将拥有一个包含Integer
对象的ArrayList <String>()-显然这不好。
因为Class<String>
不是Class<Serializable>
。 但是Class<String>
是Class<? extends Serializable>
Class<? extends Serializable>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.