Używam klasy Guava TypeToken
do sprawdzenia, czy instancje dowolnego typu można przypisać do obiektów innego typu.Opis metody Guava TypeToken.isAssignableFrom
W poniższym fragmencie kodu, mam testowanie jeśli typy zadeklarowane jako List
są przypisywane z List<String>
, i na odwrót:
TypeToken rawListType = new TypeToken<List>(){};
TypeToken parameterizedListType = new TypeToken<List<String>>(){};
System.out.println(rawListType.isAssignableFrom(parameterizedListType)); //true
System.out.println(parameterizedListType.isAssignableFrom(rawListType)); //false
Dlaczego drugie wywołanie isAssignableFrom
zwrotów false
, biorąc pod uwagę, że kod poniżej nie skompilować , więc mogę przypisać List<String>
z List
(z ostrzeżeniem):
List l = null;
List<String> l2 = null;
l = l2;
l2 = l; //Type Safety Warning
Moja intuicja jest taka, że jeśli Guava odpowiada ins typy te można przypisać bez ostrzeżeń (?). Jeśli jest to poprawne, w jaki sposób mogę sprawdzić możliwość przypisania w sensie kompilatora, pozwalając mi przypisać obiekt do innego (z ostrzeżeniami lub bez ostrzeżeń), tak jak jest to pokazane w drugim fragmencie kodu?
Witam @Paul. Nie jest to dokładnie to, czego szukam, jeśli sprawdzę możliwość przypisania typów surowych, lista będzie przypisywana z listy itd., A to nie jest poprawne. Szukam sposobu sprawdzania możliwości przypisania nawet w przypadkach, w których kompilator musiałby dodawać implicite za sądy. –
Sergio
Zrozum - zobacz moją aktualizację. –
Twoje rozwiązanie wydaje mi się poprawne, czy masz jakieś pojęcie dlaczego TypeToken tego nie robi? Przynajmniej powinni to udokumentować w metodzie javadoc. – Sergio