java 反射 获取字段值_java – 如何使用反射访问对象中的字段值

我的问题:如何克服IllegalAccessException使用反射访问对象的字段的值。

扩展:我试图学习反思,使我的一些项目更通用。我试图调用field.getValue(object),以获取该对象中该字段的值时遇到IllegalAccessException。我可以得到的名称和类型只是罚款。

如果我将声明从私有更改为公共,那么这很好。但是为了努力遵循封装的“规则”,我不想这样做。任何帮助将不胜感激!谢谢!

我的代码:

package main;

import java.lang.reflect.Field;

public class Tester {

public static void main(String args[]) throws Exception {

new Tester().reflectionTest();

}

public void reflectionTest() throws Exception {

Person person = new Person("John Doe", "555-123-4567", "Rover");

Field[] fields = person.getClass().getDeclaredFields();

for (Field field : fields) {

System.out.println("Field Name: " + field.getName());

System.out.println("Field Type: " + field.getType());

System.out.println("Field Value: " + field.get(person));

//The line above throws: Exception in thread "main" java.lang.IllegalAccessException: Class main.Tester can not access a member of class main.Tester$Person with modifiers "private final"

}

}

public class Person {

private final String name;

private final String phoneNumber;

private final String dogsName;

public Person(String name, String phoneNumber, String dogsName) {

this.name = name;

this.phoneNumber = phoneNumber;

this.dogsName = dogsName;

}

}

}

输出:

run:

Field Name: name

Field Type: class java.lang.String

Exception in thread "main" java.lang.IllegalAccessException: Class main.Tester can not access a member of class main.Tester$Person with modifiers "private final"

at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:95)

at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:261)

at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:253)

at java.lang.reflect.Field.doSecurityCheck(Field.java:983)

at java.lang.reflect.Field.getFieldAccessor(Field.java:927)

at java.lang.reflect.Field.get(Field.java:372)

at main.Tester.reflectionTest(Tester.java:17)

at main.Tester.main(Tester.java:8)

Java Result: 1

BUILD SUCCESSFUL (total time: 0 seconds)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值