如何将当前方法的参数放入列表中

时间:2012-11-15 07:05:05

标签: java variadic-functions

我有两种方法,比如

public void login(String userName, String password)
{

}

public void login(String userName, String password, Object loginOption)
{

}

我希望能以某种方法解决所有问题:

public boolean getThingsDone(Object...vargs)
{
    //Do The Real Action
    return true;
}

所以我必须进行不同的函数调用:

public void login(String userName, String password)
{
    getThingsDone(userName,password);
}

public void login(String userName, String password, Object loginOption)
{
    getThingsDone(userName,password,loginOption);
}    

有什么方法可以将不同的参数放到一个List中,所以我可以进行相同的调用

getThingsDone(parameterList);

我不知道但是将这两个方法声明为login(String ... vargs),但这会让其他人使用此方法感到困惑。

有没有人遇到过这个问题?任何提示都将不胜感激。

3 个答案:

答案 0 :(得分:3)

您可以创建一个包含三个属性的Login类: - username, password, loginOption

public class Login {
    private String username;
    private String password;
    private Object loginOptions;

    // Constructors
    // public accessors.
}

在您的登录方法中,将Login引用作为参数传递: -

public void login(Login login) {

}

因此,如果您想通过loginOptions,请按以下方式调用: -

login(new Login(username, password, loginOptions));

否则,只需使用2-parameterized constructor类的Login: -

login(new Login(username, password));

从登录方法中,调用其他方法: -

getThingsDone(login);

现在在该方法中,检查: - if (login.getLoginOptions() != null)。如果为null,则执行与usernamepassword相关的操作。如果它不是null,那么做与所有这些相关的事情。

答案 1 :(得分:3)

public void login(String userName, String password, Object loginOption)

这个方法应该做的事情应该能够处理loginOption为空时的情况。

然后您可以按如下方式调用它:

public void login(String userName, String password) {
    login(userName, password, null);

答案 2 :(得分:0)

您可以传递数组列表并使用长度来执行您需要的操作。为什么不使用重载方法并模块化其余的代码呢?