博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java反射 - 字段
阅读量:6292 次
发布时间:2019-06-22

本文共 2035 字,大约阅读时间需要 6 分钟。

使用Java反射,您可以检查类的字段(成员变量)并在运行时获取/设置它们。 这是通过Java类java.lang.reflect.Field完成的。 本文将更详细地介绍Java Field对象。 请记住也要检查Sun的JavaDoc。

获取字段对象

Field类是从Class对象中获取的。 这里是一个例子:

Class aClass = ...//获取一个class对象Field[] fields = aClass.getFields();

Field []数组将为每个在类中声明的公共字段设置一个Field实例。

如果您知道要访问的字段的名称,则可以像这样访问它:

Class  aClass = MyObject.classField field = aClass.getField("someField");

上面的例子将返回Field实例对应的字段someField,如下面的MyObject所声明的:

public class MyObject{  public String someField = null;}

如果没有字段以getField()方法的参数形式存在,则抛出NoSuchFieldException。

字段名称

获得Field实例后,可以使用Field.getName()方法获取其字段名称,如下所示:

Field field = ... //obtain field objectString fieldName = field.getName();

字段类型

您可以使用Field.getType()方法确定字段的字段类型(String,int等):

Field field = aClass.getField("someField");Object fieldType = field.getType();

获取和设置字段值

获得Field引用后,可以使用Field.get()和Field.set()方法来获取和设置其值,如下所示:

Class  aClass = MyObject.classField field = aClass.getField("someField");MyObject objectInstance = new MyObject();Object value = field.get(objectInstance);field.set(objetInstance, value);

传递给get和set方法的objectInstance参数应该是拥有该字段的类的一个实例。 在上面的例子中,使用了MyObject的实例,因为someField是MyObject类的实例成员。

它是一个静态字段(public static ...),它传递null作为get和set方法的参数,而不是上面传递的objectInstance参数。

实战

package com.reflection.detail;import java.lang.reflect.Field;/** * Created by Fant.J. * 2018/2/7 14:51 */public class Reflection_Fields {    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {        //获取field对象        Class aClass = People.class;        Field[] fields = aClass.getFields();        //如果你知道一些字段的名字,你可以这样获取到它        Field field = aClass.getField("someField");        System.out.println(field.getName()+"   "+field.getType());        //那么,我们能获取到它的字段类型,那如何取出该字段的值呢        People people = new People();        Object obj = field.get(people);        System.out.println(obj.toString());        //如何给字段设置值呢        field.set(people,"shuai");        Object obj2 = field.get(people);        System.out.println(obj2.toString());    }}

结果

someField   class java.lang.StringFantJshuai

项目代码:

转载地址:http://ygcta.baihongyu.com/

你可能感兴趣的文章
Swift中出现“no such module cocoa”的错误
查看>>
开关电源过流保护-打嗝模式
查看>>
使用 jQuery Deferred 和 Promise 创建响应式应用程序
查看>>
EasyUI中那些不容易被发现的坑——EasyUI重复请求2次的问题
查看>>
nodejs教程
查看>>
NestIn VS插件 visual studio 中将同类CS文件放在一起显示
查看>>
iOS开发基础知识--碎片44
查看>>
ConcurrentHashMap原理分析
查看>>
Move to Another Changelist
查看>>
dede自定义表单增加添加时间怎么弄
查看>>
linux sort命令
查看>>
PHP- 深入PHP、Redis连接
查看>>
大数据分析神兽麒麟(Apache Kylin)
查看>>
[LeetCode] Ternary Expression Parser 三元表达式解析器
查看>>
很认真的聊一聊程序员的自我修养
查看>>
linux基础命令
查看>>
[LeetCode] Minimum Moves to Equal Array Elements 最少移动次数使数组元素相等
查看>>
破解许可
查看>>
Linux的视频编程(V4L2编程)【转】
查看>>
Atitit hsv转grb 应该优先使用hsv颜色原则 方便人类
查看>>