Comment puis-je faire de la méthode de retour de type générique?

Considérer cet exemple (typique en programmation orientée objet, des livres):

J'ai un Animal classe, où chaque Animal peut avoir de nombreux amis.

Et les sous-classes comme Dog, Duck, Mouse etc, qui ajoutent un comportement spécifique, comme bark(), quack() etc.

Voici la Animal classe:

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);
    }
}

Et voici un extrait de code avec beaucoup de typecasting:

Mouse jerry = new Mouse();
jerry.addFriend("spike", new Dog());
jerry.addFriend("quacker", new Duck());

((Dog) jerry.callFriend("spike")).bark();
((Duck) jerry.callFriend("quacker")).quack();

Est il possible que je peux utiliser des génériques pour le type de retour pour se débarrasser de la typecasting, de sorte que je peux dire

jerry.callFriend("spike").bark();
jerry.callFriend("quacker").quack();

Voici quelques code initial avec le type de retour transmis à la méthode comme un paramètre qui n'est jamais utilisé.

public<T extends Animal> T callFriend(String name, T unusedTypeObj){
    return (T)friends.get(name);        
}

Est-il un moyen de comprendre le type de retour à l'exécution sans le paramètre supplémentaire à l'aide de instanceof? Ou au moins par le passage d'une catégorie du type, au lieu d'une instance fictive.

Je comprends les génériques sont pour moment de la compilation, la vérification de type, mais est-il une solution pour cela?

InformationsquelleAutor Sathish | 2009-01-16