我不明白爲什麼這會讓編譯器感到困惑。我正在使用通用類型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
這就是說,我不明白爲什麼'DoesntWork'不應該工作。 –
試着強制類型:'genericClass。 get(String.class)'(不確定它是否是正確的語法) –