用于传递和调用方法引用的 Lambda 语法

2024-02-08

是什么用于传递和调用方法引用的 Lambda 语法?

场景:根据值构建对象(单选按钮)Enum http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html.

我传递了枚举值的集合。我希望另一个方法(构造函数)对每个枚举值调用一个方法。该方法调用确定每个单选按钮显示的标签。

但该方法的名称因每个特定的 Enum 类而异。一些枚举有一个getTitle方法,另一个可能有一个名为getDescription or getCaption,还有一个可能有getLocalizedVariationOfTitle。如何让每个调用程序员传递要调用的特定方法?

Collection<SomeEnum> enumValues = Arrays.asList( SomeEnum.values() );
x = new EnumRadioButtons( enumValues , ??methodReferenceToGetTitle?? );

传递和调用的语法,??methodReferenceToGetTitle??我不明白。构造函数看起来像这样:

public EnumRadioButtons ( Collection<?> options , ??methodReferenceToGetTitle?? ) {
    …
    for ( Object option : options ) {
        this.setTitleOfEachOption( option , ??methodReferenceToGetTitle?? );
    }
}

当方法引用被取消引用时,代码实际上变为:

this.setTitleOfEachOption( option , option.getTitle() );  // Pass the radio button item, and its label text.

or:

this.setTitleOfEachOption( option , option.getDescription() );

or:

this.setTitleOfEachOption( option , option.getSomeLocalizedVariationOfTitle() );

我尝试通过MyEnum::getTitle对于一个名为MyEnum确实有一个方法getTitle()。但我收到编译器错误。

我有预感这个答案可能会使用Supplier http://docs.oracle.com/javase/8/docs/api/java/util/function/Supplier.html:

public EnumRadioButtons ( Collection<?> options , java.util.function.Supplier<String> supplierOfTitle ) {
    super( caption , options );
    for ( Object option : options ) {
        this.setTitleOfEachOption( option , supplierOfTitle.get() );
    }
}

作为解决方法,我可以要求每个枚举实现一个接口TitleGetable例如:

public interface TitleGetable
{
    public String getTitle ();
}

但是让所有调用程序员都携带并显式实现这个额外的接口似乎很愚蠢。鉴于这是一个仅返回字符串的方法,看起来它需要一个简单的 Lambda 语法。


当您希望用户能够使用 lambda 语法时,您所要做的就是采用一个参数,该参数是一个仅具有一个抽象函数的接口。
调用者决定使用方法引用,即带有以下内容的 lambda
() -> 样式或只是像常规的 java 8 之前的接口一样实现接口。为了方便起见,java.util.function 中有几个预定义的函数。

为了获得更好的类型安全性,最好使用泛型而不是原始集合。

这将是一个定义。

class EnumRadioButtons<T> {

    public EnumRadioButtons(Collection<T> options, Function<T,String> f ) {
        for (T option : options) {
            this.setTitleOfEachOption(option, f.apply(option));
        }
    }

    public void setTitleOfEachOption(T option, String title) {
          System.out.println("DEBUG - Setting title of option: " + option  + " to have title of: " + title );
    }
}

例如,可以与此枚举一起使用:

enum MyEnum {
    A,B,C;

    public String myToString() {
        return toString();
    }
}

…和这个main方法类:

class User {
    public static void main(String[] args) {

        EnumRadioButtons<MyEnum> bts 
                = new EnumRadioButtons<>(Arrays.asList(MyEnum.values()),
                        MyEnum::myToString); // user of method reference
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于传递和调用方法引用的 Lambda 语法 的相关文章

  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • 如何将用户输入与枚举值映射?

    我有一个基本的enum宣言 enum Title Prof Dr Mr Mdm Mrs Miss NA 我正在尝试将用户输入 0 1 2 3 4 5 AnyNumber 映射为正确的值enum像这样 std map
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp

随机推荐

  • 算术运算的右侧必须是“any”、“number”或枚举类型

    我在 JS 中有这段代码 我需要让它在 TypeScript 中工作 它一直在说 算术运算的右侧必须是 any number 或枚举类型 sort field reverse primer var key primer function x
  • 使用 jQuery 防止第二个按钮单击

    我的页面上有一个按钮 如果用户第二次单击该按钮 我不想执行任何操作 我有以下代码 但它不起作用 有人可以帮忙吗 myButton click function var count 0 count alert button if count
  • C 有跨平台文件 IO/路径 util 库吗?

    是否有一些 C 库可以实现与平台无关的路径操作版本 我想到的一些例子 从相对路径获取绝对路径 不需要文件存在 确保目录存在 创建一个文件 如果不存在 以及给定路径中缺少的任何目录 连接路径 获取路径的目录部分 获取路径的文件名部分 还有很多
  • 如何在 Octave 中声明符号矩阵?

    在 MatLab 中 您可以非常轻松地声明符号 syms a b mat a b 但是 当我尝试在 Octave 中复制此内容时 出现错误 这是我正在使用的代码 gt symbols gt a sym a a a gt b sym b b
  • 如何强制 Instagram 在 Safari 而不是应用内浏览器中打开链接

    Instagram 添加了一个应用内浏览器 打开链接时会自动使用该浏览器 我的网站需要在普通浏览器中打开 例如 Safari 适用于 iPhone 我试图弄清楚如何强制它重定向到正确的浏览器 如果通过 Instagram 浏览器打开此链接
  • RxJava/RxAndroid 检查互联网连接是否可用

    我有这个代码来检查互联网连接是否可用 public static boolean isOnline Runtime runtime Runtime getRuntime try Process ipProcess runtime exec
  • Pytest 可以在预先安排的时间运行吗?

    我正在使用 pytest 使用 python3 脚本运行我的测试 如下所示 pytest s test file py tee a myoutput log 有用 现在我想在每天的特定时间运行它 我尝试从 Linux 控制台 crontab
  • 类型错误:无法将序列乘以 float 类型的非 int

    我试图把float and int在我的编码中 但它仍然说 不能将序列乘以非 int 类型float PV input investment amout r float input rate n int input year FV cont
  • Gradle:找不到提供的方法()

    这是首选 https virgo47 wordpress com 2015 05 13 why gradle doesnt provide provided provided or provided group这是哪里有记录的 https
  • 如何更改文本区域中的字体颜色

    现在我有一个文本区域 可以从字符串中获取文本 我将文本区域的背景颜色设置为黑色 但是默认文本颜色为黑色 因此在突出显示它之前您看不到它 我似乎无法找到将字体颜色更改为白色的方法 CSS 有没有一种简单的方法可以做到这一点 html div
  • XPC 在工作区中的两个可可应用程序之间,NSXPCConnection 立即失效

    我有两个 Cocoa 应用程序 一个将成为此 XPC 关系中的发送者 另一个将成为接收者 In the applicationDidFinishLaunching在发送方中 我首先打开第二个接收方应用程序 NSError error nil
  • Android 在 Fling 上获取 Mapview 停止动画

    我需要限制用户可以在地图视图中导航到的区域 除非他们会看到空白屏幕 我创建了一个扩展地图视图并覆盖 onTouchEvent 的类 我正在检测 ACTION UP 操作并检查此处的坐标 并在必要时重新定位地图 一切正常 直到用户 扔 地图
  • 如何将功能区按钮连接到 Excel 加载项中定义的函数?

    我正在使用 MSVS 2013 创建 C MS Excel 加载项 在以前的外接程序范例中 功能区类设计器直接将功能区按钮单击事件连接到外接程序应用程序类中的功能 现在功能区功能在功能区类本身中定义 从单独的功能区控件类访问 ThisAdd
  • 当客户端和服务器位于同一台计算机上时,Kerberos 身份验证不运行

    当尝试从运行 jboss 服务器的同一台计算机访问应用程序时 出现以下错误 org springframework security authentication BadCredentialsException Kerberos valid
  • htaccess 301 重定向整个网站,但有例外

    我正在尝试创建一个 htaccess 文件来重定向我的整个网站 除了一些例外 但我无法让它工作 我需要重定向整个内容 提供特定的重定向 并排除两个页面 以下是我的非工作示例 谢谢 RewriteCond REQUEST URI events
  • 在 PyCharm 中运行 odoo 项目

    让我的脚接触 PyCharm 我有一个项目 它是 Odoo 14 模块 PyCharm 已为我的项目建立索引 它指示错误 警告和拼写错误 好的 现在我想运行我的 Odoo 来看看我的项目做了什么 我假设我应该通过 GUI 中的某个按钮来执行
  • 使用 Xcode 调试 Maya 插件

    我正在尝试使用 Xcode 4 6 3 调试功能调试为 Maya 2013 构建的 Maya 插件 我希望能够设置断点并通过插件进行跟踪 但我无法设置 Xcode 进行 Maya 调试 在 编辑方案 部分中 我将可执行文件设置为 Maya
  • 通过减小实体大小来提高 App Engine 性能

    目的是减少经常运行且每次必须 db get 数百个键的代码的 CPU 成本和响应时间 这还管用吗 我可以预期具有数百个键的 db get 的 API 时间吗 当我减小实体的大小时大致线性地减小 目前该实体附加了以下数据 9 String 9
  • Yii 按日期从 到 条件搜索表单

    我尝试创建搜索表单来按日期 从 到条件列出数据库中的数据 我是 Yii 初学者 我的任务是 我有型号 public from date public to date Rules public function rules return ar
  • 用于传递和调用方法引用的 Lambda 语法

    是什么用于传递和调用方法引用的 Lambda 语法 场景 根据值构建对象 单选按钮 Enum http docs oracle com javase tutorial java javaOO enum html 我传递了枚举值的集合 我希望