资讯专栏INFORMATION COLUMN

Java知识点总结(反射-反射操作泛型)

AprilJ / 2953人阅读

摘要:知识点总结反射反射操作泛型知识点总结反射采用泛型擦除的机制来引入泛型。中的泛型仅仅是给编译器使用的,确保数据的安全性和免去强制类型转换的麻烦。

Java知识点总结(反射-反射操作泛型)

@(Java知识点总结)[Java, 反射]

Java采用泛型擦除的机制来引入泛型。Java中的泛型仅仅是给编译器javac使用的, 确保数据的安全性和免去强制类型转换的麻烦 。但是,__一旦编译完成,所有的和泛型有关的类型全部擦除__。

为了通过反射操作这些类型以迎合实际开发的需要,Java就新增了ParameterizedType,GenericArrayType,TypeVariable 和WildcardType几种类型来代表不能被归一到Class类中的类型但是又和原始类型齐名的类型。

ParameterizedType: 表示一种参数化的类型,比如Collection

GenericArrayType: 表示一种元素类型是参数化类型或者类型变量的数组类型

TypeVariable: 是各种类型变量的公共父接口

WildcardType: 代表一种通配符类型表达

示例:

import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
 
 
public class Test06 {
  
  public void t1(Map map , List list){
    System.out.println("t1");
  }
  
  // 获得指定方法,参数的泛型信息
  private static void test1() {
    try {
     Method m = Test06.class.getMethod("t1", Map.class,List.class);
     Type[] types = m.getGenericParameterTypes();
     for (Type paramType : types) {
       System.out.println("#"+paramType);
       
       if (paramType instanceof ParameterizedType) {
         Type[] genericTypes = ((ParameterizedType)paramType).getActualTypeArguments();
         for (Type genericType : genericTypes) {
          System.out.println("————参数泛型类型:"+genericType);
         }
         
       }
     }
    } catch (Exception e) {
     e.printStackTrace();
    }
  }
  
  public Map t2(){
    System.out.println("t2");
    return null;
  }
  
  // 获取指定方法返回值泛型信息
  private static void test2() {
    try {
     Method m = Test06.class.getMethod("t2", null);
     Type returnType = m.getGenericReturnType();
     if (returnType instanceof ParameterizedType) {
       Type[] genericTypes = ((ParameterizedType)returnType).getActualTypeArguments();
       for (Type genericType : genericTypes) {
         System.out.println("返回值泛型类型:"+genericType);
       }
     }
     
    } catch (NoSuchMethodException | SecurityException e) {
     e.printStackTrace();
    }
  }
 
  public static void main(String[] args) {
    test1();
    System.out.println("-------------");
    test2();
  }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71597.html

相关文章

  • Java学习路线总结,搬砖工逆袭Java架构师(全网最强)

    摘要:哪吒社区技能树打卡打卡贴函数式接口简介领域优质创作者哪吒公众号作者架构师奋斗者扫描主页左侧二维码,加入群聊,一起学习一起进步欢迎点赞收藏留言前情提要无意间听到领导们的谈话,现在公司的现状是码农太多,但能独立带队的人太少,简而言之,不缺干 ? 哪吒社区Java技能树打卡 【打卡贴 day2...

    Scorpion 评论0 收藏0
  • 1、类加载器 2、反射构造方法 3、反射成员变量 4、反射成员方法 5、反射配置文件运行类中的方法

    摘要:通过反射获取无参构造方法并使用得到无参构造方法获取所有的修饰的构造方法。如果方法没有返回值,返回的是反射获取空参数成员方法并运行代码演示反射获取成员方法并运行获取对象中的成员方法获取的是文件中的所有公共成员方法包括继承的类是描述 01类加载器 * A.类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。  ...

    Profeel 评论0 收藏0
  • 第12章 元编程与注解、反射 《Kotlin 项目实战开发》

    摘要:第章元编程与注解反射反射是在运行时获取类的函数方法属性父类接口注解元数据泛型信息等类的内部信息的机制。本章介绍中的注解与反射编程的相关内容。元编程本质上是一种对源代码本身进行高层次抽象的编码技术。反射是促进元编程的一种很有价值的语言特性。 第12章 元编程与注解、反射 反射(Reflection)是在运行时获取类的函数(方法)、属性、父类、接口、注解元数据、泛型信息等类的内部信息的机...

    joyqi 评论0 收藏0
  • Java识点总结反射-介绍)

    摘要:知识点总结反射介绍知识点总结反射反射程序在运行状态中,可以动态加载一个只有名称的类动态调用类的所有属性和方法加载完类之后,在堆内存中,就产生了一个类型的对象一个类只有一个对象。 Java知识点总结(反射-介绍) @(Java知识点总结)[Java, 反射] 反射 程序在 运行状态中 ,可以动态加载一个只有名称的类 (动态调用类的所有属性和方法)Class c = Class.for...

    msup 评论0 收藏0
  • Java识点汇总

    摘要:由于类型擦除机制的存在,泛型类中的类型参数等信息,在运行时刻是不存在的。对此,对类文件的格式做了修订,添加了属性,用来包含不在类型系统中的类型信息。在运行时刻,会读取属性的内容并提供给反射来使用。 OOP 对象的创建和拷贝 对象的初始化 多态的实现 内部类、匿名类、静态类 对象内存模型 上面内容均请参考以下文章: 谈谈Java的面向对象 运行时 异常 聊聊Java的异常机制及实现 ...

    Chao 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<