下面是我的界面 -
public interface IClient {
public String executeSync(ClientInput input);
}
这是我的界面实现 -
public class TestingClient implements IClient {
@Override
public String executeSync(ClientInput input) {
}
}
现在我有一个工厂,它可以像这样获取 TestingClient
的实例 -
IClient client = TestingClientFactory.getInstance();
现在客户将调用我的 TestingClient
的 executeSync
方法,该方法接受 ClientInput
参数,下面是客户端输入
。
public final class ClientInput {
private Long userid;
private Long clientid;
private Long timeout = 20L;
private boolean debug;
private Map<String, String> parameterMap;
public ClientInput(Long userid, Long clientid, Map<String, String> parameterMap, Long timeout, boolean debug) {
this.userid = userid;
this.clientid = clientid;
this.parameterMap = parameterMap;
this.timeout = timeout;
this.debug = debug;
}
... //getters here
}
因此,当客户调用 TestingClient
的 executeSync
方法时,他们将像这样创建 ClientInput
参数,然后使用工厂获取TestingClient
的实例,然后相应地调用executeSync方法。
Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("attribute", "segmentation");
ClientInput input = new ClientInput(109739281L, 20L, paramMap, 1000L, true);
IClient client = TestingClientFactory.getInstance();
client.executeSync(input);
问题陈述:-
- 这是创建
ClientInput
参数并传递给executeSync
方法(如上所示)的正确方法吗? - 我的 ClientInput 中已经存在三个 Long 类型的参数,其他开发人员可能不清楚哪个位置对应哪个字段(尤其是在那些漫长的夜晚......)。有什么想法如何避免这种情况?
- 如果需要更多输入,则会导致构造函数声明更长。我该如何克服这种情况?
最佳答案
如果您有更多参数,请使用构建器模式。这使得代码变得干净。 (参见 this 示例)
例如,您可以拥有
clientinput.userid("userid)
.clientid("clientid")
一些参数如果没有指定可以是可选的。就像如果没有设置超时和调试,它们可以采用默认值
关于java - 如何高效地将各种输入参数传递给类中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21037892/