【发布时间】:2013-04-01 06:42:31
【问题描述】:
我不明白为什么这会让编译器感到困惑。我使用泛型类型T 来保存与put 和get 方法无关的对象。我一直认为GenericClass 和GenericClass<Object> 在功能上是相同的,但我一定是误会了。编译DoesntWork 类时,我得到incompatible types - required: String - found: Object。 Works 类符合我的预期。这是怎么回事?
public class GenericClass<T> {
public <V> void put(Class<V> key, V value) {
// put into map
}
public <V> V get(Class<V> key) {
// get from map
return null;
}
public static class DoesntWork {
public DoesntWork() {
GenericClass genericClass = new GenericClass();
String s = genericClass.get(String.class);
}
}
public static class Works {
public Works() {
GenericClass<Object> genericClass = new GenericClass<Object>();
String s = genericClass.get(String.class);
}
}
}
【问题讨论】:
-
genericClass更接近genericClass<?>而不是genericClass<Object> -
话虽如此,我不明白为什么
DoesntWork不应该工作。 -
尝试强制类型:
genericClass.<String>get(String.class)(不确定语法是否正确)