Der folgende Code stammt aus einer Android-Bibliothek namens ButterKnife. Ich finde heraus, wie es funktioniert.Java-Generics basierend auf Rückgabetyp?
@SuppressWarnings("unchecked") // That's the point.
public <T> T castParam(Object value, String from, int fromPosition, String to, int toPosition) {
try {
return (T) value;
} catch (ClassCastException e) {
throw new IllegalStateException("Parameter #"
+ (fromPosition + 1)
+ " of method '"
+ from
+ "' was of the wrong type for parameter #"
+ (toPosition + 1)
+ " of method '"
+ to
+ "'. See cause for more info.", e);
}
}
Ich habe versucht, das Verhalten dieser Funktion neu zu erstellen:
@SuppressWarnings("unchecked")
public static <T> T cast(Object o){
try {
return (T) o;
} catch (ClassCastException e){
throw new AssertionError("Error");
}
}
Und Nutzung:
Object o = new String("test");
Double d = cast(o);
Aber die Ausnahme noch nie gefangen, es an der Linie geworfen wird, wenn die Methode wird aufgerufen. Warum das?
Auch, wie funktioniert das genau? Woher weiß die Methode, auf was sie wirken soll?
Hier jemand anderes versucht, genau das gleiche zu tun: http://stackoverflow.com/questions/14524751/cast-object-to-generic-type-for-returning – SJuan76
Wie funktioniert die Bibliothek dann? – Greyshack