这就是我的问题.我有一个带有几个getter方法和一个实现类的接口.

Class MyInterface {
    String getA();
    String getB();
    ...
}

Class MyClass implements MyInterface {
}

我需要编写一些逻辑来比较MyClass的两个对象之间的Get方法的值.

static List<Function> getters = List.of(MyInterface::getA, MyInterface::getB, ...); //this is hard-coded

for(Function getter : getters) {
    if(getter.apply(obj1).equals(getter.apply(obj2))
        //do something
}

无论我怎么try ,我似乎都不能得到正确的语法,并满足"类型"神.请帮帮忙.

使用@FunctionalInterface,我能够将列表定义为成员变量,而不是静态变量,如下所示.

@FunctionalInterface
interface GetterFunction {
    String get();
}

List<GetterFunction> allGetters = List.of(this::getA, this::getB, ...)

但这看起来很难看,感觉还有更好的方法.

我也不想做反思.

推荐答案

为什么要把所有的获得者都放在一个名单上呢?如果您无论如何都要对它们进行硬编码,不妨写出判断:

check(MyInterface::getA, obj1, obj2)
check(MyInterface::getB, obj1, obj2)

void <T> check(Function<MyInterface, T> getter, MyInterface obj1, MyInterface obj2) {
  if (getter.apply(obj1).equals(getter.apply(obj2)) {
    // ...
  }
}

Java相关问答推荐

将具有多个未知字段的SON映射到Java POJO

当切换javaFX场景时,stage的大小正在Minimize

强制Mockito返回null而不是emtpy list

如何在Javascript中设置文本区域圆角的样式

使用标记时,场景大纲不在多个线程上运行

如何在带有Micronaut的YAML中使用包含特殊字符的字符串作为键

在Java Swing Paint应用程序中捕获快速鼠标移动时遇到困难

为什么当我创建Robot对象时,JavaFX引发IlLegalStateException异常?

在Java 15应用程序中运行Java脚本和Python代码

组合连接以从两个表返回数据

为了安全起见,有必要复制一份 list 吗?

为什么相同的数据条码在视觉上看起来不同?

将java.util.Date(01.01.0001)转换为java.time.LocalDate将返回29.12.0000

在权限列表中找不到我的应用程序

如何利用OpenTelemeter将初始值(零)输出到普罗米修斯

在Spring Boot中使用咖啡因进行缓存-根据输出控制缓存

如何在更改分辨率时将鼠标坐标计算为世界坐标

Java 21保护模式的穷尽性

为什么Java编译器为没有参数的方法(getter方法)创建桥接方法

找不到 jar 文件系统提供程序try 使用 jdeps 和 jlink 创建收缩 Java 映像来运行 Minecraft