2012-11-15 40 views
0

我有兩個方法,如如何把當前方法的參數放入一個列表

public void login(String userName, String password) 
{ 

} 

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

} 

,我希望能得到所有的人在一定的方法soloved的:

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); 
}  

有什麼辦法,我可以把不同的參數到一個列表,這樣我就可以做出同樣的電話

getThingsDone(parameterList); 

我不知道,但兩者的方法聲明爲登錄(字符串... vargs),但會迷惑其他人使用這個方法。

有沒有人遇到過這個問題?任何暗示將不勝感激。

+1

我認爲這是一個壞主意,使用可變參數此。從login(String,String,Object)調用login(String,String)有什麼不對? – threenplusone

+0

@threenplusone我同意這是一個壞主意,但我會以相反的方式來做:從login(String,String)調用login(String,String,Object)。該邏輯僅在一種方法中需要,而其他方法僅提供缺省參數。 – msell

+0

是的,我將像這樣修改login()方法。但仍然有一些方法與login()沒有任何關係,他們也想使用getThingsDone()方法。 – abuuu

回答

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)); 

否則,只需使用Login2-parameterized constructor類別: -

login(new Login(username, password)); 

而且從登錄方法,調用其他的方法是這樣的: -

getThingsDone(login); 

現在,在該方法中,檢查: - if (login.getLoginOptions() != null)。如果它爲空,則執行與usernamepassword有關的事情。如果它不是空的,那麼做一些與它們相關的事情。

+0

這是一個好主意,在這種情況下,當其他人使用此類時,「Login」類可以描述參數信息。但令人遺憾的是,getThingsDone()是一種'魔術'方法,它也將在resetPassword(String,String)等中使用。爲每種方法定義一個新類太困難。 – abuuu

+0

@abuuu ..您不需要爲該方法創建另一個類。在resetPassword也傳遞相同的參數 - 「登錄」。 'resetPassword(登錄登錄)'。從那裏以同樣的方式調用你的getThingsDone。所以,你已經將你的登錄信息封裝在一個對象中。在任何地方,你都可以傳遞這個對象,並對其進行處理。 –

+0

哦,這意味着我只需要爲這個整個類創建一個'parameterClass',並傳遞不同的參數作爲parameterClass的屬性。謝謝,我會立即嘗試。 – abuuu

0

您可以傳遞數組列表並使用長度來完成您所需要的任何操作。爲什麼不使用重載方法並將代碼的其餘部分模塊化?

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

此方法應該做的事情,應該能夠處理的情況下,當loginOption爲空。

然後,你可以按照以下方式調用它:

public void login(String userName, String password) { 
    login(userName, password, null); 
相關問題