Mekanisme refleksi mengendalikan jenis generik melalui kelas dalam pakej java.lang.reflect: Dapatkan jenis: Gunakan antara muka Jenis untuk mewakili jenis Java. Dapatkan parameter generik: Untuk jenis parameter, gunakan antara muka TypeVariable untuk mendapatkan parameter generiknya. Dapatkan sempadan jenis: Antara muka TypeVariable menyediakan kaedah untuk mendapatkan sempadan jenis parameter generik.
Pengenalan
Mekanisme refleksi Java membolehkan program untuk memeriksa dan mengubah suai struktur dan tingkah laku kelas pada masa jalankan. Ia melakukan ini dengan mencerminkan metadata kelas dan objek. Mengendalikan jenis generik adalah satu cabaran untuk refleksi kerana ia melibatkan pemadaman jenis.
Jenis Pemadaman
Di Jawa, jenis generik dipadamkan pada masa penyusunan. Ini bermakna maklumat jenis generik tidak disimpan pada masa jalan. Contohnya:
List<String> myList = new ArrayList<>();
Pada masa jalanan, myList
akan menjadi ArrayList
biasa tanpa sebarang maklumat jenis generik. myList
将是一个普通的 ArrayList
,不包含任何泛型类型信息。
反射机制和泛型类型
反射机制通过使用 java.lang.reflect
包中的类来处理泛型类型。可以通过以下步骤获取泛型类型信息:
Type
接口来表示 Java 类型。TypeVariable
接口来获取其泛型参数。TypeVariable
接口提供了方法来获取泛型参数的类型界限。实战案例
以下示例演示了如何使用反射机制获取泛型类型信息:
import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { // 创建一个泛型类型对象 List<String> myList = new ArrayList<>(); // 获取类型 Type type = myList.getClass().getGenericSuperclass(); // 检查类型是否为参数化类型 if (type instanceof ParameterizedType) { // 获取泛型参数 Type[] actualTypes = ((ParameterizedType) type).getActualTypeArguments(); // 打印泛型参数的类型 for (Type actualType : actualTypes) { System.out.println(actualType.getTypeName()); } } } }
在该示例中,我们获取 myList
java.lang.reflect
. Maklumat jenis generik boleh diperolehi melalui langkah berikut: 🎜Type
untuk mewakili jenis Java. TypeVariable
untuk mendapatkan parameter generiknya. TypeVariable
Antara muka menyediakan kaedah untuk mendapatkan sempadan jenis parameter generik. java.lang.String🎜Dalam contoh ini, kami memperoleh jenis generik
myList kod> taip dan cetak nama jenisnya. Hasil keluarannya ialah: 🎜rrreee
Atas ialah kandungan terperinci Bagaimanakah mekanisme refleksi Java menangani jenis generik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!