2017-09-05 30 views
0

我想在創建時使用Java中的lambda來配置對象的字段。這意味着我必須調用lambda內聯,但是我沒有看到任何運行lambda的示例,然後再將它分配給某些內容。具體而言,我想要做這樣的事情:將Java lambda的結果分配給字段

private JTextField tfInput =() -> { JTextField tf = JTextField(""); tf.setEditable(false); return tf; }(); 

這在Java中可能嗎?

+1

有什麼意義?爲什麼不直接運行語句? – shmosel

+0

因爲它內聯使得它在任何時候都不會在其他函數中將tf.getEditable()假(至少默認)。無論如何,稍後我可以決定這種編碼風格是否好。我只想知道這是否可能。 – PopKernel

+0

我想你可以把'tfInput = new JTextField(「」); tfInput.setEditable(false);'在構造函數中。我沒有看到lambda會是什麼。 – ajb

回答

3

你將不得不在lambda轉換爲功能接口第一:

private JTextField tfInput = (Supplier<JTextField>)(() -> { 
    JTextField tf = new JTextField(""); 
    tf.setEditable(false); 
    return tf; 
}).get(); 

但我不知道爲什麼你會爲這個選擇聲明一個簡單的方法,或者從構造函數初始化,而不是或一個初始化塊。此外,請注意,如果您嘗試確保該字段在初始化後纔可見,則可能需要將其設爲finalvolatile

+1

創建一個這樣做的方法可能更有效率。 – Killjoy1221

+0

@ Killjoy1221:...或讓構造函數執行此操作,這更簡單:'private JTextField tfInput; {tfInput = new JTextField(「」); tfInput.setEditable(假); }'。 OP的目標是不可能看到可編輯的文本字段,這與lambda變體的限制相同。 – Holger

相關問題