gpt4 book ai didi

java - 静态方法如何使用比较器?

转载 作者:行者123 更新时间:2023-11-30 06:21:32 26 4
gpt4 key购买 nike

我有一个静态方法需要调用 SportsMenComparator。但是,众所周知,这是不允许的。静态函数如何使用比较器子类?尽管我有变通方法,但我正在寻找针对此特定问题的最佳实践。

final class SportsMan {

private final String name;
private final int rank;
private final String sport;

public SportsMan (String name, int rank, String sport) {
this.name = name;
this.rank = rank;
this.sport = sport;
}

public String getName() {
return name;
}

public int getRank() {
return rank;
}

public String getSport() {
return sport;
}
}


final class Sport {

private final String sport;
private final int numberOfPlayers;

public Sport(String sport, int numberOfPlayers) {
this.sport = sport;
this.numberOfPlayers = numberOfPlayers;
}

public String getSport() {
return sport;
}

public int getNumberOfPlayers() {
return numberOfPlayers;
}
}


public final class Joins {

private Joins () {}



public class SportsMenComparator implements Comparator<SportsMan> {
@Override
public int compare(SportsMan s1, SportsMan s2) {
return s1.getSport().compareTo(s2.getSport());
}
}



public static void innerJoinSort(List<SportsMan> sportsMans, List<Sport> sportList) {
Collections.sort(sportsMans, new SportsMenComparator());

}


}

Eclipse 导致以下消息:无法访问类型 Joins 的封闭实例,其中 Joins 是封闭类的名称。

最佳答案

But this, as we all know is not allowed. How does a static function use a comparator subclass ?

您不能使用非静态引用,但您仍然可以创建一个新对象并使用它。因此,由于您要创建一个新的 SportsMenComparator 对象并传递,所以没有问题。

例如:

public static void main(String[] args) {
List<String> s =new ArrayList<String>();
s.add(""); // allowed
}

但是

List<String> s =new ArrayList<String>();
public static void main(String[] args) {
System.out.println();
s.add(""); // Error: Cannot make a static reference to the non-static field s
}

编辑:

由于您在 Joins 中定义了比较器类,因此您需要 Joins 对象来访问其中的比较

Collections.sort(sportsMans, new Joins().new SportsMenComparator());

关于java - 静态方法如何使用比较器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20393524/

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