反射机造经由过程 java.lang.reflect 包外的类措置泛型范例:猎取范例:应用 type 接心示意 java 范例。猎取泛型参数:对于于参数化范例,应用 typevariable 接心猎取其泛型参数。猎取范例界线:typevariable 接心供给办法猎取泛型参数的范例界线。

Java反射机制如何处理泛型类型?

Java 反射机造假如处置惩罚泛型范例?

简介

Java 反射机造容许程序正在运转时查抄以及修正类的构造以及止为。它经由过程反映类以及器械的元数据来完成那一点。处置惩罚泛型范例是反射机造的一个应战,由于它触及到范例擦除了。

范例擦除了

正在 Java 外,泛型范例正在编译时被擦除了。那象征着泛型范例疑息正在运转时没有会被消费。比方:

List<String> myList = new ArrayList<>();
登录后复造

正在运转时,myList 将是一个平凡的 ArrayList,没有蕴含任何泛型范例疑息。

反射机造以及泛型范例

反射机造经由过程利用 java.lang.reflect 包外的类来措置泛型范例。否以经由过程下列步调猎取泛型范例疑息:

  1. 猎取范例: 应用 Type 接心来示意 Java 范例。
  2. 猎取泛型参数: 如何范例是参数化范例,可使用 TypeVariable 接心来猎取其泛型参数。
  3. 猎取范例界线: 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仄台此外相闭文章!

点赞(45) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部