我正在将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)有问题?我该如何解决?