java - 如何高效地将各种输入参数传递给类中的方法?

标签 java constructor input-parameters

下面是我的界面 -

public interface IClient {
    public String executeSync(ClientInput input);
}

这是我的界面实现 -

public class TestingClient implements IClient {

    @Override
    public String executeSync(ClientInput input) {

    }
}

现在我有一个工厂,它可以像这样获取 TestingClient 的实例 -

IClient client = TestingClientFactory.getInstance();

现在客户将调用我的 TestingClientexecuteSync 方法,该方法接受 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
}    

因此,当客户调用 TestingClientexecuteSync 方法时,他们将像这样创建 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);

问题陈述:-

  1. 这是创建 ClientInput 参数并传递给 executeSync 方法(如上所示)的正确方法吗?
  2. 我的 ClientInput 中已经存在三个 Long 类型的参数,其他开发人员可能不清楚哪个位置对应哪个字段(尤其是在那些漫长的夜晚......)。有什么想法如何避免这种情况?
  3. 如果需要更多输入,则会导致构造函数声明更长。我该如何克服这种情况?

最佳答案

如果您有更多参数,请使用构建器模式。这使得代码变得干净。 (参见 this 示例)

例如,您可以拥有

clientinput.userid("userid)
           .clientid("clientid")

一些参数如果没有指定可以是可选的。就像如果没有设置超时和调试,它们可以采用默认值

关于java - 如何高效地将各种输入参数传递给类中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21037892/

相关文章:

java - 如何将 JFileChooser 起始目录更改为桌面?

java - 如何将 JDBC azure sql 服务器连接到 Android 应用程序?

c# - 抽象类的子类,总是调用抽象构造函数

java - 构造函数是否可以接受由先前参数定义的多个参数?

postgresql - 查找所有输入参数和与这些输入参数对应的查询

sql-server-2008 - 在过程中输入日期时间作为输入参数

java - 时间表 Android 应用程序无法运行

java - OpenCV 用 java 中的另一个值替换特定像素值

javascript - Javascript继承对象需要 "Subclass.prototype.constructor = Subclass"吗?

mysql - 如何使用mysql调用带有输入和输出参数的Entity Framework Core中的存储过程