2017-09-05 40 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

相关问题