美文网首页
泛型与反射

泛型与反射

作者: 小编 | 来源:发表于2017-10-12 16:26 被阅读34次

引入泛型的目的

通过泛型使得在编译阶段完成一些类型转换的工作,避免在运行时强制类型转换而出现ClassCastException,即类型转换异常。

优点

在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

1,类型安全。 泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。

2,消除强制类型转换。 泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。

3,潜在的性能收益。 泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是更多类型信息可用于编译器这一事实,为未来版本的 JVM 的优化带来可能。由于泛型的实现方式,支持泛型(几乎)不需要 JVM 或类文件更改。所有工作都在编译器中完成,编译器生成类似于没有泛型(和强制类型转换)时所写的代码,只是更能确保类型安全而已。

Java反射机制定义

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

1.通过完整包名和类名获取类的Class对象clazz;
2.通过Class对象clazz获取它的构造函数,属性和方法所对应的Constructor对象,Filed对象和Method对象。【getConstructors()、getMethods()、getFields()】
3.通过Class对象clazz生成类的实例对象obj。【newInstance()】
4.反射调用方法。【Method.invoke(Object obj, Object... args)】

Class clazz = Class.forName("com.yolo.Person");
Constructor constructor = clazz.getConstructor(null);

// 获得与该方法对应的Method对象
Method methodSetName = clazz.getDeclaredMethod("setName", String.class);
Method methodGetName = clazz.getDeclaredMethod("getName");
// 获得与该属性对应的Filed对象
Field field = clazz.getDeclaredField("name");
Field fieldAge = clazz.getDeclaredField("age");

// 实例化Person对象
Person p = (Person) clazz.newInstance();
Person p1 = (Person) constructor.newInstance();

// 调用指定的函数并传递参数
methodSetName.invoke(p, "tracelss");
methodGetName.invoke(p);

// 访问成员变量,如果是基础数据类型,则使用setXXX/getXXX形式的方法,否则直接使用set/get
field.set(p, "xin");
fieldAge.setInt(p, 18);

相关文章

  • 泛型与反射

    引入泛型的目的 通过泛型使得在编译阶段完成一些类型转换的工作,避免在运行时强制类型转换而出现ClassCastEx...

  • 反射与泛型

    原文: https://lsy.iteye.com/blog/220264 反射是Java语言中很重要的一个组成部...

  • 泛型 & 注解 & Log4J日志组件

    掌握的知识 : 基本用法、泛型擦除、泛型类/泛型方法/泛型接口、泛型关键字、反射泛型(案例) 泛型 概述 : 泛型...

  • Java泛型

    本文介绍的知识点 泛型是什么? 泛型的使用在反射中使用泛型在集合类中使用泛型 关于泛型擦除如何理解?如何避免泛型擦...

  • 关于反射的使用

    反射中获取泛型参数信息

  • java注解与反射,泛型与反射

    一、反射与注解 内置注解 java内置了3种注解,用来为编译器提供检查。 自定义注解 元注解 元注解是用来修饰注解...

  • 【Java】【反射】泛型反射

    泛型反射 在运行时,泛型是无效的,所以可以通过反射在运行时将其他类型变量添加到集合,而不需要考虑泛型

  • Java 泛型反射与擦除

    问:下面两个代码片段有问题吗,为什么? 答:上面 Part 1 编译出错,Part 2 编译 OK,运行出错。因为...

  • Java笔记---泛型

    总结了泛型的基本语法、上下级通配符、泛型反射以及使用泛型的一些实践,看完还不会用泛型你顺着网线来打我(狗头)。 我...

  • Java 泛型

    泛型类 例如 泛型接口 例如 泛型通配符 泛型方法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型上下边...

网友评论

      本文标题:泛型与反射

      本文链接:https://www.haomeiwen.com/subject/kbfoyxtx.html