Java从外部类读取私有字段的值

一、概述

我需要访问一个私有字段。

class IWasDesignedPoorly {
    private Hashtable stuffIWant;
}

IWasDesignedPoorly obj = ...;

如何使用反射获取值stuffIWant

二、详解

为了访问私有字段,您需要从类的声明字段中获取它们,然后使其可访问:

Field f = obj.getClass().getDeclaredField("stuffIWant"); //NoSuchFieldException
f.setAccessible(true);
Hashtable iWantThis = (Hashtable) f.get(obj); //IllegalAccessException

访问字段,将字段设置为可访问并获取值都可能引发Exceptions,尽管上面需要注释的唯一检查异常。

NoSuchFieldException如果你问一个字段由不符合声明的字段的名称将被抛出。

obj.getClass().getDeclaredField("misspelled"); //will throw NoSuchFieldException

IllegalAccessException会如果字段是不可访问(被抛出例如,如果是私人和通过失踪了尚未作出访问f.setAccessible(true)线。

RuntimeException可抛出s为要么SecurityExceptionS(如果JVM的SecurityManager将不允许你改变一个字段的可访问性),或IllegalArgumentExceptionS,如果你尝试接入领域的对象不是字段的类的类型上:

f.get("BOB"); //will throw IllegalArgumentException, as String is of the wrong type

如若转载,请注明出处:https://www.javaidea.cn/article/8276.html

(0)
上一篇 2022年2月7日 上午10:03
下一篇 2022年2月7日 上午10:03

相关推荐

发表评论

您的电子邮箱地址不会被公开。