首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java反射:初始化时设置超类字段

问Java反射:初始化时设置超类字段
EN

Stack Overflow用户
提问于 2014-11-10 23:57:53
回答 1查看 455关注 0票数 0

我通过反射初始化了一个新类,并用‘this’设置了一个超类字段:

代码语言:javascript
复制
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”。是否可以在创建超类之后和创建基类之前以某种方式设置jt,使我可以在初始化期间访问'this‘(不添加非默认构造)?

代码语言:javascript
复制
public class LocalMotions extends JavaTask {
   ...
  private int nb = super.jtListener.getParameter(NUMBER));
   ...
EN

回答 1

Stack Overflow用户

发布于 2014-11-11 00:34:58

在对象完全构造之前发布对该对象的引用对于JVM来说是危险的,并且强烈建议您这样做。

当JSR-133在工作中,java内存模型被澄清时,声明JVM不会为在构造过程中泄漏的对象的引用提供线程安全保证。也就是说,引用可能会在已分配但未清零的线程之间泄漏,等等。

有关更多详细信息,请研究JSR133、Java内存模型和“安全构造技术”。http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#finalRight是一个很好的起点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26847741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档