2016-09-01 5 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)); 

headers.setToを呼び出している間、私はtoオブジェクトに関連して上述やっているすべてを行うことが可能ですか?

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

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

、その後、あなたが行うことができますが。 –

+2

メソッドを連鎖させたい場合は、呼び出されたオブジェクトを返すようにします。 –

+0

私はラムダ式にあまり慣れていません。しかし、私はラムダ式でこれを行うことができますか? – Arya

答えて

2

POJOアプローチではありません。いずれかのフィールドに必要なすべてのフィールドをパラメータとして持つコンストラクタを作成するか、ビルダーパターンを作成します。

+0

_ "POJOのアプローチではありません" _ソリューションはオブジェクトを作成しないと言っていますか? – zeroflagL

+1

ここで、 "POJO"という用語は少し混乱するかもしれません。私の悪い。いくつかの属性を持つJava Bean、デフォルトのコンストラクタ、getterとsetterについては、「POJO」という用語を数年間使用しました。 –

0

このように述べた引数を取るとクラスのコンストラクタがある場合にのみ可能である:私はあなたがいると思う

Headers headers = new Headers(); 
headers.setTo(Arrays.asList(new To("[email protected]","John Smith"))); 
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 ... 
} 

次に、あなたの呼び出しは次のようになり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

'setTo'は実際には非効率な同等の処理をしているので、*生の型*、スペルミスのあるメソッド名、誤ったコーディングスタイル(コレクションの代わりに' forEach'を使ってリストに追加する) 'addAll'、@zeroflagLと同じ質問をしなければなりません。どのような問題が' Supplier'を介してリストを提供しています。 – Holger

+0

私は基本的にラムダ式の使用でそれを書こうとしていました。 *(誤植については申し訳ありませんが、私はIDEを使用しませんでした。テキストエディタですべてを入力しました)* –

0

をあなたはToクラスの入力パラメータのみオプション(良いもの)でコンストラクタを追加することができない限り、工場出荷時は次のようにその後、あなたはそれを再作成することができます/ビルダーパターン。

この定義: `To`は不変(オプション、ただし推奨)作成し、電子メールと名前の両方を受け取るコンストラクタを提供

Headers headers = new Headers(); 
headers.setTo(ToBuilder.CreateTo("[email protected]","John Smith")); 
関連する問題