程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

java 两个相互引用的最终实例

发布于2022-12-05 23:33     阅读(774)     评论(0)     点赞(25)     收藏(4)


我有两个班级:

public class Group {
  private final MyObject object;

  public Group(MyObject object) {
    this.object = object;
  }
}


public class MyObject {
  public Group group;

  public MyObject () {

  }
}

目前,Group 有一个 MyObject 的最终实例。

我目前是这样启动它们的:

MyObject object = new MyObject();
Group group = new Group(object);

object.group = group;

然而,这不是我想要的,因为“MyObject”中的“group”变量也需要是最终的(为了代码清晰和更容易调试)。

有什么办法可以做到这一点吗?

MyObject object = new MyObject(group);
Group group = new Group(object);

“MyObject”的修改后的构造函数将是这样的:

public class MyObject {
  private final Group group;

  public MyObject (Group group) {
    this.group = group;
  }
}

提前致谢


解决方案


您可以执行此操作的唯一方法是在其中一个构造函数中。一般来说,您希望避免this从构造函数传递,但在这种情况下别无选择(非最终字段除外)

public class Group {
  private final MyObject card;

  public Group(MyObject card) {
      this.card = card;
  }
}


public class MyObject {
  private final Group group;

  public MyObject () {
     // initialise MyObject

     // do this only after initialising MyObject
     group = new Group(this);
  }
}

// to create both at once.
MyObject obj = new MyObject(); // will have a Group inside.


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/583877/b403e4c8e264c967db06/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

25 0
收藏该文
已收藏

评论内容:(最多支持255个字符)