2

Java反射可以在运行时检视类、接口、属性和方法,而无需在编译时知道类名、方法名等等。它也同样使用反射支持实例化新的对象、调用方法和get/set属性值。
Java反射非常强大和有用。例如, Java反射可以用在映射JSON文件的属性到Java 对象的get/set方法,如Jackson、Gosn、Boon等库的实现。另外,反射可以用在映射JDBC结果集的列名到Java对象的get/set方法。
本教程将深入介绍Java反射。它将解释Java反射的基础知识,包括如何使用数组、注解、范型和动态代理,以及动态类的加载和重新加载。
它还将向您展示如何执行更具体的Java反射任务,例如读取类的所有getter方法,或访问类的私有字段和方法。
本教程还将清除一些关于范型信息在运行时可用性的认知混淆。一些人声称所有范型信息在运行时丢失,这是不正确的。
本教程描述基于Java8。

Java反射示例

这是一个快速的Java反射示例,向你展示使用反射的代码格式:

Method[] methods = MyObject.class.getMethods();

for(Method method : methods){
    System.out.println("method = " + method.getName());
}
Method [] methods=String.class.getMethods();
for (Method method:methods) {
    logger.debug("String 类方法名称:{},参数个数:{}",method.getName(),method.getParameterCount());
}

本示例从一个名为MyObject的类中获取一个Class对象。使用这个class对象展示获得它的方法列表,循环并输出方法名称。

Java 类对象

使用Java反射时,起点通常是需要使用反射检视的类的Class对象。例如,获得名为MyObject类的Class对象可以这么写:

Class myObjectClass = MyObject.class;

现在,你可以引用类MyObjectClass对象。
Java Reflection Class tutorial中有Class对象更详细的描述。

方法和属性

一旦你拥有表示某些类的Class对象的引用,你可以访问这些类的方法和属性。下面是访问一个Java类方法和属性的示例:

Class myObjectClass = MyObject.class;
Method[] methods = myObjectClass.getMethods();
Field[] fields   = myObjectClass.getFields();

一旦拥有一个java类的方法和属性的引用,就可以开始检视它们。你可以获得方法和属性的名称,采用的参数等等。你甚至可以通过这些方法和属性引用调用方法和使用get/set属性值。
Java Reflection Fields tutorialJava Reflection Methods tutorial教程中有关于访问方法和属性的更详尽的描述。


团结
128 声望8 粉丝

诗酒趁年华


« 上一篇
Broadleaf概念
下一篇 »
java反射-类