How do I make the method return type generic?

前端 未结 19 2676
無奈伤痛
無奈伤痛 2020-11-22 06:16

Consider this example (typical in OOP books):

I have an Animal class, where each Animal can have many friends.
And subclasses like

19条回答
  •  滥情空心
    2020-11-22 06:33

    Here is the simpler version:

    public  T callFriend(String name) {
        return (T) friends.get(name); //Casting to T not needed in this case but its a good practice to do
    }
    

    Fully working code:

        public class Test {
            public static class Animal {
                private Map friends = new HashMap<>();
    
                public void addFriend(String name, Animal animal){
                    friends.put(name,animal);
                }
    
                public  T callFriend(String name){
                    return (T) friends.get(name);
                }
            }
    
            public static class Dog extends Animal {
    
                public void bark() {
                    System.out.println("i am dog");
                }
            }
    
            public static class Duck extends Animal {
    
                public void quack() {
                    System.out.println("i am duck");
                }
            }
    
            public static void main(String [] args) {
                Animal animals = new Animal();
                animals.addFriend("dog", new Dog());
                animals.addFriend("duck", new Duck());
    
                Dog dog = animals.callFriend("dog");
                dog.bark();
    
                Duck duck = animals.callFriend("duck");
                duck.quack();
    
            }
        }
    

提交回复
热议问题