Java Generics - Ký tự đại diện được giới hạn dưới
Dấu chấm hỏi (?), Đại diện cho ký tự đại diện, là viết tắt của loại không xác định trong generic. Có thể đôi khi bạn muốn hạn chế các loại kiểu được phép chuyển cho một tham số kiểu. Ví dụ: một phương thức hoạt động trên các số có thể chỉ muốn chấp nhận các bản sao của Số nguyên hoặc các lớp cha của nó như Số.
Để khai báo tham số Ký tự đại diện giới hạn dưới, hãy liệt kê dấu?, Theo sau là từ khóa super, tiếp theo là giới hạn dưới của nó.
Thí dụ
Ví dụ sau minh họa cách super được sử dụng để chỉ định một ký tự đại diện giới hạn dưới.
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.List;
public class GenericsTester {
public static void addCat(List<? super Cat> catList) {
catList.add(new RedCat());
System.out.println("Cat Added");
}
public static void main(String[] args) {
List<Animal> animalList= new ArrayList<Animal>();
List<Cat> catList= new ArrayList<Cat>();
List<RedCat> redCatList= new ArrayList<RedCat>();
List<Dog> dogList= new ArrayList<Dog>();
//add list of super class Animal of Cat class
addCat(animalList);
//add list of Cat class
addCat(catList);
//compile time error
//can not add list of subclass RedCat of Cat class
//addCat(redCatList);
//compile time error
//can not add list of subclass Dog of Superclass Animal of Cat class
//addCat.addMethod(dogList);
}
}
class Animal {}
class Cat extends Animal {}
class RedCat extends Cat {}
class Dog extends Animal {}
Điều này sẽ tạo ra kết quả sau:
Cat Added
Cat Added