我有两种方法,比如
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),但这会让其他人使用此方法感到困惑。
有没有人遇到过这个问题?任何提示都将不胜感激。
答案 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,则执行与username
和password
相关的操作。如果它不是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)
您可以传递数组列表并使用长度来执行您需要的操作。为什么不使用重载方法并模块化其余的代码呢?