gpt4 book ai didi

java - 不使用局部变量时无法推断Comparator的类型参数

转载 作者:行者123 更新时间:2023-12-02 10:56:16 30 4
gpt4 key购买 nike

尝试使用“比较器比较”和“然后比较”方法将比较器链接在一起时,出现一个奇怪的编译器错误。我有一个元组列表,我想首先按所有元组的第一个元素对列表进行排序,如果出现重复,我想按第二个元素进行排序。
在第一次尝试中,我分阶段构造了比较器。元组的第一个元素的比较由局部变量c1引用。然后从该变量构造第二个元素比较器。
在第二次尝试中,我内联了第一个元素比较器的构造,并且没有任何局部变量。我假设代码与之前的尝试相同,但是突然之间,编译器将代码标记为编译时错误。

public class Example {

public static class Tuple<A, B> {

private final A a;
private final B b;

public Tuple(A a, B b) {
this.a = a;
this.b = b;
}

public A getA() {return a;}

public B getB() {return b;}

}

{
List<Tuple<Integer, String>> tuples = new ArrayList<>();

Comparator<Tuple<Integer, String>> c1 = Comparator.comparing(Tuple::getA);

// Attemp 1) compiles
tuples.sort(c1.thenComparing(Comparator.comparing(Tuple::getB)));

// Attemp 2) does not compile.
// compiler error: Cannot infer type argument(s) for <T, U> comparing(Function<? super T,? extends U>)
tuples.sort(Comparator.comparing(Tuple::getA).thenComparing(Comparator.comparing(Tuple::getB)));
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}


}
我在这里缺少 super 简单的东西吗?在我看来,这样的内联永远不会导致编译时错误。这可能是编译器错误吗?我毕竟使用的是JDK 14预览版。希望知道其他版本的JDK是否也存在此问题。

最佳答案

正如chrylis -cautiouslyoptimistic-在评论中指出的,这确实是我正在使用的IDE的问题(在这种情况下,我正在使用Eclipse 2020-06(4.16.0)),而不是Java编译器。当我使用命令行编译文件时,它可以正常工作。

关于java - 不使用局部变量时无法推断Comparator的类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63291203/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com