gpt4 book ai didi

java - 方法引用中的类型推断

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:53:38 25 4
gpt4 key购买 nike

我最近接触了 Java 8 并尝试使用方法引用。我尝试了不同类型的方法引用并陷入“对特定类型的任意对象的实例方法的引用”类型。

String[] arr = {"First", "Second", "Third", "Fourth"};

Arrays.sort(arr, String::compareToIgnoreCase);

这非常有效。但是当我尝试通过其类型引用用户定义类的方法时:

Demo2[] arr = {a, b};

Arrays.sort(arr, Demo2::compare);

这将编译时错误显示为“无法从静态上下文中引用非静态方法”。

这是 Demo2 类:

public class Demo2 implements Comparator<Demo2> {
Integer i;

Demo2(Integer i1){
i = i1;
}

public Integer getI() {
return i;
}

@Override
public int compare(Demo2 o1, Demo2 o2) {
return o1.getI().compareTo(o2.getI());
}
}

最佳答案

正如 greg-449 指出的那样,您的代码有一个错误。

通过像 YourObjet::yourMethod 这样的方法引用,您可以对实例的方法进行static 引用。因此将为每个对象调用该方法,因此签名需要与之前的不同

将编译的代码将具有以下形式:

Demo2[] demos = {a, b};
Arrays.sort(demos, Demo2::compareTo);

public class Demo2 {
Integer i;

Demo2(Integer i1){
i = i1;
}

public Integer getI() {
return i;
}

public int compareTo(Demo2 other) {
return this.getI().compareTo(other.getI());
}
}

但正如 RealSkeptic 指出的那样,这不是实现和对象比较的正确方法。您应该给 Arrays.sort 方法一个比较器:

 Arrays.sort(demos, (obj1, obj2) -> obj1.getI().compareTo(obj2.getI()));

关于java - 方法引用中的类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39073799/

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