Rumah >Java >javaTutorial >Kad bebas generik dalam fungsi Java: sempadan atas dan bawah
Di Java, kad bebas generik membenarkan mewakili jenis generik tanpa menyatakan jenis tertentu. Aksara kad bebas sempadan atas (9d2765459de79669203dc2fefe6ee69e) mewakili jenis parameter T atau mana-mana subkelasnya, membenarkan data subkelas diterima dalam senarai. Aksara kad bebas yang lebih rendah (117c5a0bdb71ea9a9d0c2b99b03abe3e) mewakili T atau mana-mana kelas supernya, membenarkan data superclass dalam senarai diterima. Kad bebas boleh digunakan untuk melaksanakan senarai tatasusunan boleh ubah saiz dengan generik, membenarkan pengendalian pelbagai jenis dan operasi penambahan/penyingkiran.
Kad Liar Generik dalam Java Fungsi: Sempadan Atas dan Bawah
Di Jawa, kami boleh menggunakan kad bebas untuk mewakili jenis generik, membolehkan kami menggunakan generik tanpa menyatakan jenis konkrit. Artikel ini akan meneroka kad bebas atas dan bawah dan menunjukkan penggunaannya melalui contoh praktikal.
Kad bebas berhad
Kad bebas berhad (T
atau mana-mana subkelasnya. Contohnya: d203bb1ae585225d4838a2b7e3d0503e
) 表示类型参数 T
或其任何子类。例如:
public static <T extends Number> double sum(List<T> numbers) { double total = 0; for (T num : numbers) { total += num.doubleValue(); } return total; }
此函数可以接受任何 Number (如 Integer、Double) 或其子类的列表。我们可以安全地将任何满足 Number 约束的列表传递给此函数,如下所示:
List<Integer> ints = List.of(1, 2, 3); double sumIntegers = sum(ints); // 编译通过
下限通配符
下限通配符 (117c5a0bdb71ea9a9d0c2b99b03abe3e
) 表示类型参数 T
或其任何超类。例如:
public static <T super Number> void process(List<T> entities) { for (T entity : entities) { System.out.println(entity.getClass().getName()); } }
此函数可以接受任何 Number 的超类 (如 Object、Serializable) 的列表。我们可以安全地将任何满足 Number 超类约束的列表传递给此函数,如下所示:
List<Object> objects = List.of("Hello", 123); process(objects); // 编译通过
实战案例
考虑一个可调整大小的数组列表,我们可以使用泛型通配符来实现它:
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ResizableArrayList<E> { private List<E> list; public ResizableArrayList() { this(new ArrayList<>()); } public ResizableArrayList(List<? super E> initialList) { list = new ArrayList<>(initialList); } public void addAll(List<? extends E> elements) { list.addAll(elements); } public void removeAll(List<? super E> elements) { list.removeAll(elements); } public List<E> getList() { return list; } public static void main(String[] args) { ResizableArrayList<Integer> numbers = new ResizableArrayList<>( Arrays.asList(1, 2, 3) ); numbers.addAll(Arrays.asList(4, 5, 6)); numbers.removeAll(Arrays.asList(2, 3)); System.out.println(numbers.getList()); // [1, 4, 5, 6] } }
这个可调整大小的数组列表可以处理任何类型 E
rrreee
117c5a0bdb71ea9a9d0c2b99b03abe3e
) mewakili jenis parameter T
atau mana-mana kelas supernya. Contohnya: 🎜rrreee🎜Fungsi ini boleh menerima senarai mana-mana superclass Nombor (seperti Object, Serializable). Kita boleh lulus mana-mana senarai yang memenuhi kekangan superclass Number kepada fungsi ini dengan selamat seperti berikut: 🎜rrreee🎜🎜 Contoh praktikal 🎜🎜🎜 Pertimbangkan senarai tatasusunan boleh ubah saiz, kita boleh menggunakan kad bebas generik untuk mencapainya: 🎜rrreee🎜Senarai tatasusunan boleh resiz ini boleh resizable mengendalikan sebarang jenisE
, membenarkan kami menambah atau mengalih keluar pelbagai objek pada senarai. 🎜Atas ialah kandungan terperinci Kad bebas generik dalam fungsi Java: sempadan atas dan bawah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!