我不明白为什么这会混淆编译器.我正在使用泛型类型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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
关于原始类型如何工作的事情 - 你遗漏了论据的泛型类型 - 是它们的所有泛型及其方法也被删除了.因此,对于原始GenericClass的get,put方法也失去了它们的泛型.
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |