java - 我可以在其构造函数中引用一个对象吗?

标签 java oop constructor this

我可以执行以下操作吗?

public Manager(String userName) {
    game = new Game(userName);
    game.addManager(this);
}

问题是我在其构造函数中引用了一个对象 (this)(在实际创建之前)。

最佳答案

尽管它是合法的 Java,并且在您描述的情况下(它是构造函数的最后一行),这是一件非常安全的事情(某些边缘情况除外),但作为实践,这是一件坏事做,就像使用 goto(在支持关键字的语言中)一样,它应该是您长期认真思考的事情。对于您的情况,更好的做法是将构造函数设为私有(private),删除对 addManager 的调用并公开一个静态工厂方法:

 public static Manager createManager(String userName) {
        Manager manager = new Manager(userName);
        manager.game.addManager(manager);
        return manager;
 }

我还应该指出,类之间的那种相互依赖性(经理知道游戏,游戏也知道经理)绝对是一种代码味道,我会像我一样担心这种需要是关于从构造函数传递这个。

关于java - 我可以在其构造函数中引用一个对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2683735/

相关文章:

java - 将参数添加到 RouterNanoHTTPD 处理程序

java - 将日期字符串增加 1 天

java - 通过 0 清除 python 位索引

JavaScript:公共(public)方法和原型(prototype)

javascript - 如何在html div标签上显示person对象的属性?

java - 签名重叠时如何重载构造函数?

java - ObjectMapper 转换为 arraylist 不保留顺序

javascript - 类上的方法 - 静态成员

c++ - 具有多个数组的类的构造函数初始化列表(C++11 可以,boost 和 std::vector 不行)

PHP - 构造函数不返回false