gpt4 book ai didi

java - 更好地设计构造函数中的初始化

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:30 25 4
gpt4 key购买 nike

我有一个看起来像这样的类,它根据从凭据服务检索到的凭据充当客户端的工厂。它一次构建客户端并在每次调用时返回它。

public class ClientFactory {
private CredentialService credentialService;
private ClientA clientA;

public ClientFactory(CredentialService credentialService){
this.credentialService = credentialService;
//initialization in constructor
this.clientA = buildClientA(credentialService.getCredentials());
}

public ClientA getClientA(){
return clientA;
}

/** Build new ClientA using crendentials*/
private ClientA buildClientA(String credentials){
return new ClientA(credentials);
}
}

我看到的问题是构造函数中的第 2 行,它基本上开始使用依赖项“credentialService”来立即初始化其他依赖项。如果其他一些开发人员在构造函数中移动代码顺序,它将开始失败。其他选项也是将方法 getClientA() 更改为此。

   public ClientA getClientA(){
if(clientA == null) {
this.clientA = buildClientA(credentialService.getCredentials());
}
return clientA;
}

但是它有线程安全问题。有没有更好的方法来设计 above 类,避免我上面强调的问题?

谢谢

最佳答案

嗯,

this.clientA = buildClientA(credentialService.getCredentials()); 依赖传递给构造函数的参数 credentialService,而不是成员 this.credentialService 。因此,初始化的顺序无关紧要。

顺便说一句,为了安全和避免混淆,我不会对构造函数和成员的参数使用相同的名称。

关于java - 更好地设计构造函数中的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24944204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com