2016-09-01 82 views
1

現在,我通過以下方式傳遞to:首先創建對象,調用方法來設置值,然後將其傳遞給另一個對象方法。使用Java初始化新對象並設置值8

To to = new To(); 
to.setEmail("[email protected]"); 
to.setName("John Smith"); 

Headers headers = new Headers(); 
headers.setTo(Arrays.asList(to)); 

是否有可能做的一切我所做的上述關係到to對象同時呼籲headers.setTo

Headers headers = new Headers(); 
headers.setTo(Is it possible to Initialize and set the "To" values in here?); 
+3

製作'To'不變(可選,推薦使用),並提供了可同時接收電子郵件和名稱的構造函數。 –

+2

如果你想鏈接你的方法 - 讓他們返回它們被調用的對象。 –

+0

我對Lambda表達式不太熟悉。但是,這可能是我可以用Lambda表達式做的事情嗎? – Arya

回答

2

不符合POJO方法。您可以在To中創建一個構造函數,將所有需要的字段作爲參數或者用於構建器模式。

+0

_「不符合POJO方法」_您是否說您的解決方案不會創建對象? – zeroflagL

+1

好吧,所以術語「POJO」在這裏可能有點混亂。我的錯。我們對Java Bean使用了幾年的「POJO」這個術語,它有一些屬性,一個默認的構造函數以及getters和setter。 –

0

這是唯一可能的,如果沒有在類的構造函數給帶有提到的參數是這樣的:

public class To { 

    private String Email; 
    private String Name; 

    // The constructor 
    public To(String Email, String Name) { 
     this.Email = Email; 
     this.Name = Name; 
    } 

    // ... more code ... 
} 

然後您的通話可能看起來像:

Headers headers = new Headers(); 
headers.setTo(Arrays.asList(new To("[email protected]","John Smith"))); 
0

我認爲你是不使用com.sun.net.httpserver.Headers。如果您有自己的自定義Headers類和To類,則可以嘗試下面的修改。

class Headers{ 
    //....Other variables, getters & setters 
    List<? extends To> to = new ArrayList<>(); 

    public void setTo(Supplier<List> toSupplier){ 
     toSupplier.get().foreach(to::add); 
    } 
} 

//添加一個新的構造,以To類接受名&電子郵件。然後,可以按如下方式重新寫它:

Headers headers = new Headers(); 
Supplier<List> toSupplier =() -> Arrays.asList(new To("John Smith","[email protected]")); 
headers.setTo(toSupplier); 

OR

Headers headers = new Headers(); 
headers.setTo(() -> Arrays.asList(new To("John Smith","[email protected]"))); 
+1

您的供應商如何更簡單? – zeroflagL

+1

除了使用* raw types *,拼寫錯誤的方法名稱和不鼓勵的編碼風格(使用'forEach'添加到列表而不是收集)以及誤導性的方法名稱之外,'setTo'實際上的效率相當於'addAll',我必須像@zeroflagL一樣詢問,通過'Supplier'提供列表和額外的複製操作應該解決什麼問題? – Holger

+0

我基本上正在嘗試使用lambda表達式來編寫它。 *(對於錯別字,我沒有使用任何IDE,我只是在文本編輯器中輸入了整個內容)* –

0

除非你可以輸入參數爲To類唯一的選擇(和一個很好的)添加一個構造函數工廠/建造者模式。

定義是:

public class ToBuilder{ 
    public static To CreateTo(String Email, String Name) { 
     To to = new To(); 
     to.setEmail(Email); 
     to.setName(Name); 
     return to; 
    } 
} 

,然後你可以這樣做:

Headers headers = new Headers(); 
headers.setTo(ToBuilder.CreateTo("[email protected]","John Smith"));