2017-08-21 2 views
1

私はクラスEmailServiceImplを持っていますが、方法はsendMail(Cumsumer<EmailTemplate> template)です。メソッド内で渡されたラムダ式の値を変更する方法

EmailTemplate

  • から4つのfileds

    • に体
    • 対象

    を持っている私は、ラムダ式を使用してEmailTemplateの3つの分野を設定し、sendMailメソッドに送信しています、以下のようになります。

    emailService.sendMail(mailer-> 
           mailer 
            .to("") 
            .subject("") 
            .body("") 
           ); 
    

    しかし、私はそれは以下のようなSendMailメソッド内部の(からの)提出された第4回です追加したい:私はこのラムダ(テンプレート)を使用してEmailTemplateのいずれかのフィールドにアクセスすることはできません

    public String sendMail(Consumer<EmailTemplate> template) { 
         template.from = "XYZ"; // cannot do this 
    
        } 
    

    私は、クエリを次のようしている。

    1. は、(上記のような)メソッド内で渡されたラムダの値を変更することは可能ですか?
    2. そのようにするのは良い考えですか?
    3. ラムダを使用してこれを行うには、より良い方法はありますか?
  • +0

    'template.accept(mail - > mail.from =" XYZ ")' –

    +0

    ラムダを使用する必要がありますか?不可能ではないにしても難しい。 – Kayaman

    +0

    @Kayamanラムダを使ってこの作業がうまくいくかどうかを尋ねるだけですか? –

    答えて

    4

    (上記 のような)メソッド内で渡されたラムダの値を変更することは可能ですか?

    いいえ、sendMail()メソッドはemailTemplateのコンシューマを受け入れます。これはemailTemplate自体ではありません。消費者はemailTemplateを受け取り、それと何かを行う関数です。 4番目のフィールドを設定する場合は、ラムダの内側でそれを行う必要があります。 sendEmail()メソッドは本質的にemailTemplateを処理できるクラスを受け取ります。 emailTemplateインスタンス/状態はまったく受け取りません。

    このようにするのは良い考えですか?

    どのようにsendMail()メソッドを設計したいか、またどのような責任があるかによって異なります。見た目では、sendEmail()メソッドはemailTemplateオブジェクト(コンシューマではない)を受け取る必要があります。あなただけの消費者、あなたはそれが

    (現在のsendEmail()メソッドに送信されていない)、それはemailTemplateオブジェクトに適用されます/この使用してラムダを行うには、任意のより良いアプローチを呼び出す行うことができる唯一のことを受け取った場合?

    ラムダは動作/メソッド本体を定義します。後でそれらに供給されるオブジェクトに対する行動。この例では、ラムダの必要性はまったくありません。

    +0

    大きな説明.. –

    関連する問題