我不明白为什么这会使编译器感到困惑。我正在使用通用类型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
,get
和put
方法也将失去其泛型。
关于java - 当我不提供泛型类型时,为什么此类的行为有所不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15735235/