错配的Java比较器通用错误混搭

时间:2019-04-23 17:13:52

标签: java generics comparator

我正在将OpenJDK 11与Eclipse 2019-06 M1(4.12.0M1)结合使用。

我有一个Collator配置并存储在变量labelCollator中。

我有一个简单的小Java Comparator<Foo>,它通过其Foo属性对bar进行排序,如果没有0属性,则默认为bar:< / p>

final Comparator<Foo> fooComparator =
    Comparator.comparing(foo-> (Long)foo.findProperty("bar").orElse(0L));

编译的很好。现在,我添加另一个比较器:

final Comparator<Foo> chainedComparator = fooComparator
    .thenComparing(foo -> foo.determineLabel(), labelCollator);

Foo.determineLabel()Foo接口的方法,返回String,并且接口本身具有默认实现。

这也很不错。但是我永远不会留下足够好的自我,所以我想将它们结合起来:

final Comparator<Foo> fooComparator =
    comparing(foo-> (Long)foo.findProperty("bar").orElse(0L))
    .thenComparing(foo -> foo.determineLabel(), labelCollator);

Eclipse吓了一跳,告诉我:

  • 未为类型determineLabel()定义方法Object
  • 未为类型findProperty()定义方法Object
  • 类型不匹配:无法从Comparator<Object>转换为Comparator<Foo>

如果它们是分开工作的,为什么将它们合并到同一语句中时会出现问题?这是我的错误,还是Eclipse(或Java)有问题?我该如何解决?

0 个答案:

没有答案