将Java lambda的结果分配给字段 [英] Assign result of Java lambda to field
问题描述
我想在创建时使用Java中的lambda来配置对象上的字段.这意味着我必须调用lambda内联,但是我没有看到在将lambda分配给某些东西之前先运行lambda的示例.具体来说,我想做这样的事情:
I want to use a lambda in Java to configure a field on an object at creation time. This means that I have to invoke the lambda inline, but I have seen no examples that run a lambda before first assigning it to something. Specifically I want to do something like this:
private JTextField tfInput = () -> { JTextField tf = JTextField(""); tf.setEditable(false); return tf; }();
这在Java中可行吗?
Is this possible in Java?
推荐答案
您必须先将lambda转换为功能接口:
You would have to cast the lambda to a functional interface first:
private JTextField tfInput = (Supplier<JTextField>)(() -> {
JTextField tf = new JTextField("");
tf.setEditable(false);
return tf;
}).get();
但是我不确定为什么选择这种方法而不是声明一个简单的方法,或者从构造函数或初始化程序块进行初始化.另外,请注意,如果要确保仅在初始化字段后才可见,则可能需要将其设置为 final
或 volatile
.
But I'm not sure why you'd opt for this instead of declaring a simple method, or initializing from the constructor or an initializer block. Also, note that if you're trying to make sure the field is only visible after it's initialized, you may need to make it final
or volatile
.
这篇关于将Java lambda的结果分配给字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!