Betrachten Sie dieses Beispiel (typisch für OOP-Bücher):
Ich habe eine Animal
Klasse, in der jeder Animal
viele Freunde haben kann.
Und Subklassen mögen Dog
, Duck
, Mouse
usw. , die wie ein bestimmtes Verhalten hinzufügen bark()
, quack()
usw.
Hier ist die Animal
Klasse:
public class Animal {
private Map<String,Animal> friends = new HashMap<>();
public void addFriend(String name, Animal animal){
friends.put(name,animal);
}
public Animal callFriend(String name){
return friends.get(name);
}
}
Und hier ist ein Code-Snippet mit vielen Typografien:
Mouse jerry = new Mouse();
jerry.addFriend("spike", new Dog());
jerry.addFriend("quacker", new Duck());
((Dog) jerry.callFriend("spike")).bark();
((Duck) jerry.callFriend("quacker")).quack();
Gibt es eine Möglichkeit, Generika für den Rückgabetyp zu verwenden, um die Typumwandlung zu entfernen, so dass ich sagen kann
jerry.callFriend("spike").bark();
jerry.callFriend("quacker").quack();
Hier ist ein Anfangscode mit dem Rückgabetyp, der als Parameter an die Methode übermittelt wird und nie verwendet wird.
public<T extends Animal> T callFriend(String name, T unusedTypeObj){
return (T)friends.get(name);
}
Gibt es eine Möglichkeit, den Rückgabetyp zur Laufzeit ohne den zusätzlichen Parameter zu ermitteln instanceof
? Oder zumindest durch Übergeben einer Klasse des Typs anstelle einer Dummy-Instanz.
Ich verstehe, dass Generika für die Überprüfung der Kompilierungszeit verwendet werden, aber gibt es dafür eine Problemumgehung?