在Java中使用静态实例是否合理?

Jtv*_*d78 4 java parameters client static constructor

我无法在谷歌上找到这个问题的答案,所以这里有.

是否可以使用静态对象,以便程序的其余部分可以引用该对象?我不知道如何澄清我的问题,所以我只是展示示例代码.

public class Client {

    Frame f;
    private static Client mainClient;

    public static void main(String[] args){
        new Client().init();
    }

    private void init(){

        mainClient = this;
        f = new Frame();

    }

    public static Client getClient() {
        return mainClient;
    }

    public Frame getFrame(){
        return f;
    }   
}
Run Code Online (Sandbox Code Playgroud)

那么,在整个程序中使用getClient()方法来访问Frame对象是否可以接受,而不是将其作为参数发送给我创建的(大多数)对象?在整个程序中使用Frame,并将其作为参数添加只是为每个构造函数添加一个参数.

谢谢

Sha*_*ark 6

取决于不止一件事......

1)用法.您是否希望能够说MyClass.getClient()并获取对Client变量的引用?如果你的目标是单一的东西 - 是的.如果你的目标是一个非常方便的东西 - 是的,如果安全的话,如果你只是希望它随处可见 - 不.如果从错误的地方/时间访问它会导致崩溃和错误 - 没有.

2)人们将使用你所暴露的任何东西,期间.如果他们看到你的代码像这样提取客户端,他们也会在不合适时使用它,那么它会导致很多错误吗?:)

3)设计你真的需要吗?传递它像参数一样比在任何时候绝对访问它更清晰吗?

在衡量之后,你决定了.这看起来像它构建和工作正常.但是,任何需要这种不受限制的访问(上面提到的任何时间访问)到运行时特定的东西可能不是最好的方法; 什么适用于家庭作业可能不适用于企业软件.

  • +1:*适用于家庭作业的东西可能不适用于企业软件*这是纯金. (2认同)