反射机造经由过程 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仄台此外相闭文章!

发表评论 取消回复