java 反射父类私有属性值_如何在Java中通过反射访问父类的父类的私有字段? - java...

博客探讨了在Java中如何使用反射访问超类的私有字段,指出这可能是设计上的问题,但提供了实现方法。内容包括通过`getSuperclass()`递归查找字段,以及启用`setAccessible(true)`以访问私有变量。还讨论了静态字段的内存位置和线程池的工作原理。
摘要由CSDN通过智能技术生成

在一个API中,我使用的是一个抽象类(A类),该类具有一个私有字段(A.privateField)。

B类在API中扩展了A类。

我需要扩展B类的实现,即C类,但是我需要A类的privateField。

我应该使用反射:如何访问超超类的私有字段?

Class A

- privateField

Class B extends A

Class C extends B

+ method use A.privateField

参考方案

您需要执行此操作的事实表明设计存在缺陷。

但是,可以按照以下步骤进行操作:

class A

{

private int privateField = 3;

}

class B extends A

{}

class C extends B

{

void m() throws NoSuchFieldException, IllegalAccessException

{

Field f = getClass().getSuperclass().getSuperclass().getDeclaredField("privateField");

f.setAccessible(true); // enables access to private variables

System.out.println(f.get(this));

}

}

致电:

new C().m();

Andrzej Doyle谈论的'走上类层次结构'的一种方法如下:

Class c = getClass();

Field f = null;

while (f == null && c != null) // stop when we got field or reached top of class hierarchy

{

try

{

f = c.getDeclaredField("privateField");

}

catch (NoSuchFieldException e)

{

// only get super-class when we couldn't find field

c = c.getSuperclass();

}

}

if (f == null) // walked to the top of class hierarchy without finding field

{

System.out.println("No such field found!");

}

else

{

f.setAccessible(true);

System.out.println(f.get(this));

}

Java:静态字段在内存中的哪个位置? - java

如果我们将对象存储在对象的静态字段中,那么JVM如何为它分配内存?它是否存在于“隐式”(不确定我是否使用正确的单词)类对象中?静态字段与对象字段有何不同? 参考方案 静态字段是类变量,并且在该类的所有实例之间共享。实例变量(或我认为您引用它们的对象字段)属于类的各个实例,并且不共享。至于它们存储在内存中的位置将根据JVM的实现而定,因此没有理由需要两个不同的…Java:从类中查找项目名称 - java

仅通过类的实例,如何使用Java反射或类似方法查找项目名称?如果不是,项目名称(我真正想要的是)可以找到程序包名称吗? 参考方案 项目只是IDE使用的简单组织工具,因此项目名称不是类或JVM中包含的信息。要获取软件包,请使用Class#getPackage()。然后,可以调用Package#getName()将包作为您在代码的包声明中看到的String来获取…Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …Java-非泛型类扩展了泛型类 - java

我想知道如何(如果可能)创建一个类,它是泛型类的特定类型。具体来说,我有一个实现所有必需方法的abstract class Stack,我想有一个class StackInteger,而StackInteger的实例也是Stack的实例。我看到我可以做这样的事情:class StackInteger { …

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值