![](/img/trans.png)
[英]How to access a private field of the super class of the super class with reflection in Java?
[英]Java reflection : set super class field during initialization
我通过反射将新类初始化为a,并用'this'设置了一个超类字段:
JavaTask jt = (JavaTask) clazz.newInstance();
for(Field f : clazz.getSuperclass().asSubclass(JavaTask.class).getDeclaredFields()) {
if(f.getType().equals(JavaTaskListener.class)) {
logger.trace("Set ReadyListener");
f.setAccessible(true);
f.set(jt, this);
}
}
在这种解决方案中,初始化完成后,我可以从新实例jt访问“ this”。 在创建超类之后以及在创建基类之前可以在初始化期间访问“ this”(不添加非默认构造)的基础上设置jt吗?
public class LocalMotions extends JavaTask {
...
private int nb = super.jtListener.getParameter(NUMBER));
...
在完全构造对象之前发布对对象的引用对于JVM是危险的,因此强烈建议不要这样做。
当JSR-133投入使用并阐明了Java内存模型时,有人说JVM不会为对在构造期间泄漏的对象的引用提供线程安全保证。 也就是说,引用可能会在已分配但未清零的线程之间泄漏。
有关更多详细信息,请研究JSR 133,Java内存模型和“安全构造技术”。 http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#finalRight是一个很好的起点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.