关于Class及其泛型语义的一个简单问题。为什么没有下面的代码工作?作为泛型的Java Class类不能按预期工作
Class<Serializable> s = String.class;
的Java告诉我,Class<Serializable>
和Class<String>
是不相容的。当String
正在实施Serializable
时,他们怎么可能?
不应该泛型允许这种类型的东西吗?
关于Class及其泛型语义的一个简单问题。为什么没有下面的代码工作?作为泛型的Java Class类不能按预期工作
Class<Serializable> s = String.class;
的Java告诉我,Class<Serializable>
和Class<String>
是不相容的。当String
正在实施Serializable
时,他们怎么可能?
不应该泛型允许这种类型的东西吗?
因为Class<String>
不是Class<Serializable>
。但是Class<String>
是Class<? extends 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);
此代码后,你有一个ArrayList <字符串>()含有Integer
对象 - 显然这是不好的。
哦,我不知道'?extends'语义。谢谢! – 2011-12-18 03:45:40