Dlaczego ta klasa zachowuje się inaczej, gdy nie dostarczam typu ogólnego?
Nie rozumiem, dlaczego to myli kompilator. Używam typu ogólnegoT
trzymać obiekt niezwiązany zput
iget
metody. Zawsze myślałemGenericClass
iGenericClass<Object>
były funkcjonalnie identyczne, ale muszę się mylić. Podczas kompilacjiDoesntWork
klasa, którą dostajęincompatible types - required: String - found: Object
. TheWorks
klasa robi to, czego oczekuję. Co tu się dzieje?
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);
}
}
}