java - 通过反射访问子类中父类(super class)的私有(private)成员变量

标签 java

我有一个RMIserviceexporter类,基本上这个类是spring remoting,现在有一个名为registry port的int变量

private int registryPort = Registry.REGISTRY_PORT; // which is set to 1099

并且它有setter方法

public void setRegistryPort(int registryPort) {
    this.registryPort = registryPort;
}

现在我在后期扩展了这个类,也就是说我创建了一个新类 abcexpoerter ,它基本上扩展了 RMIserviceexporter ,我必须访问 RMIserviceexporter 的这个registryPort变量,即变量名registryPort,但我无法访问这个变量,因为现在父类中没有定义 getter 方法,请告诉我我可以通过反射访问扩展类中的这个私有(private)变量值

   class abcexpoter extends RMIServiceExporter
        {
            // now in this class i want to access the registerPort variable value  please advise how can i //access this registry port variable inside this class
        }

最佳答案

可以,但你不应该。该成员可能是私有(private)的是有原因的

这在 Class 中有介绍。和 java.lang.reflect package文档:您可以通过 getDeclaredField 获取该字段,然后使用 setAccessible 强制其可访问,然后使用 Field 中的相关 getXyz 方法(getIntgetString 等)来获取其值。

例如,因为它是一个int:

Field field = TheClass.class.getDeclaredField("registryPort");
field.setAccessible(true);
int port = field.getInt(this);

关于java - 通过反射访问子类中父类(super class)的私有(private)成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32294416/

相关文章:

java - 对数组中多个指定范围进行排序

java - MySQL 没有正确存储一些 UTF8 字符

java - 带有最小化按钮的 JDialog

java - 在android studio中哪里复制ITelephony.java以及如何导入它?请不要在没有回答的情况下关闭此内容

java - vs-code tomcat 扩展不刷新静态文件(html、css、js ..)

java - 如何从语言代码中显示英文的语言名称?

java - 如何将 Double.POSITIVE_INFINITY 转换为 BigDecimal?

java - 如何不执行超过预定时间的作业

java - 如何选择在 Java 中锁定什么对象?

java - ArrayList 的奇怪行为