反射机造经由过程 java.lang.reflect 包外的类措置泛型范例:猎取范例:应用 type 接心示意 java 范例。猎取泛型参数:对于于参数化范例,应用 typevariable 接心猎取其泛型参数。猎取范例界线:typevariable 接心供给办法猎取泛型参数的范例界线。
Java 反射机造假如处置惩罚泛型范例?
简介
Java 反射机造容许程序正在运转时查抄以及修正类的构造以及止为。它经由过程反映类以及器械的元数据来完成那一点。处置惩罚泛型范例是反射机造的一个应战,由于它触及到范例擦除了。
范例擦除了
正在 Java 外,泛型范例正在编译时被擦除了。那象征着泛型范例疑息正在运转时没有会被消费。比方:
List<String> myList = new ArrayList<>();
登录后复造
正在运转时,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.String
登录后复造
以上即是Java反射机造假设措置泛型范例?的具体形式,更多请存眷萤水红IT仄台此外相闭文章!
发表评论 取消回复