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

时间:2014-01-10 06:48:07

标签: 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();

现在,客户打算拨打接受executeSync参数的TestingClient ClientInput方法,下面是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
}    

因此,当客户拨打我们executeSync的{​​{1}}方法时,他们会像这样创建TestingClient参数,然后使用工厂获取ClientInput的实例然后相应地调用executeSync方法。

TestingClient

问题陈述: -

  1. 这是制作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方法的正确方法吗?
  2. 在我的ClientInput中已经存在三个Long类型的参数,其他开发人员可能不清楚哪个位置是哪个字段(特别是在那些漫长的夜晚......)。有什么想法如何避免这种情况?
  3. 如果需要更多输入,则会使构造函数声明更长。我怎样才能克服这种情况?

4 个答案:

答案 0 :(得分:1)

对于这个Case Better Go with Setters and Getters所有这些字段而不是Constructor

private Long userid;
private Long clientid;
private Long timeout = 20L;
private boolean debug;
private Map<String, String> parameterMap;

答案 1 :(得分:1)

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

例如,你可以

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

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

答案 2 :(得分:0)

我建议你选择安装员和吸气剂 因为将来你的Object(state)可能会增加,这总是要求你在构造函数中进行更改。

答案 3 :(得分:0)

1听起来不错,就像你做的那样。方法将包含所有信息的包装对象作为参数 - &gt;好的设计就好像对象中的信息发生了变化,方法不需要改变。显然比采用5种不同参数的方法更好。

2我认为调用该方法的常用方法是:

Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("attribute", "segmentation");

ClientInput input = new ClientInput(user.getUserId(), client.getClientId(), 20L, paramMap, 1000L, true);

IClient client = TestingClientFactory.getInstance();
client.executeSync(input);

所以它应该足够清楚并且可以避免错误

3。如果可能出现更多参数,请尝试将它们分组到其他一些包装类中,然后将用于创建调用对象(组合)。