将Java lambda的结果分配给字段 [英] Assign result of Java lambda to field

查看:51
本文介绍了将Java lambda的结果分配给字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在创建时使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆