我想在創建時使用Java中的lambda來配置對象的字段。這意味着我必須調用lambda內聯,但是我沒有看到任何運行lambda的示例,然後再將它分配給某些內容。具體而言,我想要做這樣的事情:將Java lambda的結果分配給字段
private JTextField tfInput =() -> { JTextField tf = JTextField(""); tf.setEditable(false); return tf; }();
這在Java中可能嗎?
我想在創建時使用Java中的lambda來配置對象的字段。這意味着我必須調用lambda內聯,但是我沒有看到任何運行lambda的示例,然後再將它分配給某些內容。具體而言,我想要做這樣的事情:將Java lambda的結果分配給字段
private JTextField tfInput =() -> { JTextField tf = JTextField(""); tf.setEditable(false); return tf; }();
這在Java中可能嗎?
你將不得不在lambda轉換爲功能接口第一:
private JTextField tfInput = (Supplier<JTextField>)(() -> {
JTextField tf = new JTextField("");
tf.setEditable(false);
return tf;
}).get();
但我不知道爲什麼你會爲這個選擇聲明一個簡單的方法,或者從構造函數初始化,而不是或一個初始化塊。此外,請注意,如果您嘗試確保該字段在初始化後纔可見,則可能需要將其設爲final
或volatile
。
創建一個這樣做的方法可能更有效率。 – Killjoy1221
@ Killjoy1221:...或讓構造函數執行此操作,這更簡單:'private JTextField tfInput; {tfInput = new JTextField(「」); tfInput.setEditable(假); }'。 OP的目標是不可能看到可編輯的文本字段,這與lambda變體的限制相同。 – Holger
有什麼意義?爲什麼不直接運行語句? – shmosel
因爲它內聯使得它在任何時候都不會在其他函數中將tf.getEditable()假(至少默認)。無論如何,稍後我可以決定這種編碼風格是否好。我只想知道這是否可能。 – PopKernel
我想你可以把'tfInput = new JTextField(「」); tfInput.setEditable(false);'在構造函數中。我沒有看到lambda會是什麼。 – ajb