Java集合中的泛型是在1.5版本中引入的。在使用泛型時,我們可以使用“上限通配符”和“下限通配符”的方式來限制集合的類型。
下面是一個示例:
class Animal { void eat() { System.out.println("eating"); } } class Dog extends Animal { void bark() { System.out.println("barking"); } } class Cat extends Animal { void meow() { System.out.println("meowing"); } }
假設我們有一個列表,需要存儲多種動物進去:
List<Animal> animals = new ArrayList<>(); animals.add(new Dog()); animals.add(new Cat()); animals.add(new Animal());
在這種情況下,我們可以使用“上限通配符”來限制列表的類型。通過將類型參數指定為“? extends Animal”,我們表示這個列表只能接受Animal類型或其子類型的實例:
List<? extends Animal> animals = new ArrayList<>(); animals.add(new Dog()); // compile error animals.add(new Cat()); // compile error animals.add(new Animal());
在上面的代碼中,我們無法將Dog或Cat類型的實例添加到animals列表中,因為它們并不是Animal類型或其子類型的實例。
現在假設我們有一個列表,需要存儲Dog類型的實例:
List<Dog> dogs = new ArrayList<>(); dogs.add(new Dog()); dogs.add(new Dog());
在這種情況下,我們可以使用“下限通配符”來限制列表的類型。通過將類型參數指定為“? super Dog”,我們表示這個列表只能接受Dog類型或其父類型的實例:
List<? super Dog> dogs = new ArrayList<>(); dogs.add(new Dog()); dogs.add(new Animal()); // compile error dogs.add(new Object()); // compile error
在上面的代碼中,我們無法將Animal或Object類型的實例添加到dogs列表中,因為它們并不是Dog類型或其父類型的實例。
上一篇css表格外邊框樣式