Ich verwende die Guava TypeToken
Klasse, um zu testen, ob Instanzen eines beliebigen Typs Objekten eines anderen Typs zugewiesen werden können.Guava's TypeToken.isAssignableFrom-Methode verstehen
Im folgenden Code-Schnipsel, teste ich, wenn Typen wie List
zuweisbare von List<String>
sind deklariert, und umgekehrt:
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
Warum der zweite Aufruf von isAssignableFrom
kehrt false
gegeben, dass der folgende Code nicht kompiliert , so kann ich List<String>
von List
(mit einer Warnung) zuweisen:
List l = null;
List<String> l2 = null;
l = l2;
l2 = l; //Type Safety Warning
Meine Intuition ist, dass Guava wenn in beantwortet Diese Typen sind ohne Warnung (?) zuweisbar. Wenn das korrekt ist, wie könnte ich überprüfen, ob Assignability im Sinne des Compilers mir erlaubt, ein Objekt zu einem anderen zuzuordnen (mit oder ohne Warnungen), wie es im zweiten Codeausschnitt gezeigt wird ?.
Hallo @ Paul. Es ist nicht genau das, wonach ich suche, wenn ich die Zuweisbarkeit von Rohtypen überprüfe, dann wäre die Liste zuweisbar von der Liste und so weiter, und dies ist nicht korrekt. Ich bin auf der Suche nach einer Möglichkeit, die Zuweisbarkeit zu überprüfen, selbst in Fällen, in denen der Compiler implizite Umwandlungen hinter den Courtains hinzufügen müsste. –
Sergio
Verstanden - siehe mein Update. –
Ihre Lösung scheint mir korrekt zu sein, haben Sie eine Idee, warum TypeToken das nicht tut? Zumindest sollten sie dies in der Methode Javadoc dokumentiert haben, denke ich. – Sergio