Non capisco perché questo confonde il compilatore. Sto utilizzando il tipo generico T
per contenere un oggetto che non è correlato ai metodi put
e get
. Ho sempre pensato che GenericClass
e GenericClass<Object>
fossero funzionalmente identici, ma devo sbagliarmi. Quando compilo la classe DoesntWork
ottengo incompatible types - required: String - found: Object
. La classe Works
fa quello che mi aspetto. Cosa sta succedendo qui?Perché questa classe si comporta diversamente quando non fornisco un tipo generico?
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' è più vicino a' genericClass > 'rispetto a' genericClass
Ciò detto, non riesco a capire perché' DoesntWork' non dovrebbe funzionare. –
Provate a forzare il tipo: 'genericClass. get (String.class) '(non è sicuro che sia la sintassi corretta) –