Add Strings through use of generic 'extends' causes compiler error

后端 未结 3 1759
滥情空心
滥情空心 2020-12-02 03:20

Below code :

List genericNames = new ArrayList();
genericNames.add(\"John\");

Gives compiler error :

3条回答
  •  一向
    一向 (楼主)
    2020-12-02 03:36

    When you use wildcards with extends, you can't add anything in the collection except null. Also, String is a final class; nothing can extend String.

    Reason: If it were allowed, you could just be adding the wrong type into the collection.

    Example:

    class Animal {
    
    }
    
    class Dog extends Animal {
    
    }
    
    class Cat extends Animal {
    
    }
    

    Now you have List

    public static void someMethod(List list){
        list.add(new Dog()); //not valid
    }
    

    and you invoke the method like this:

    List catList = new ArrayList(); 
    someMethod(catList);
    

    If it were allowed to add in the collection when using wildcards with extends, you just added a Dog into a collection which accepts only Cat or subtype type. Thus you can't add anything into the collection which uses wildcards with upper bounds.

提交回复
热议问题