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

标签 java comparator

我有一个静态方法需要调用 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/

相关文章:

java - 避免具有多个相同类型参数的方法

java - 相当于Java中python的shelve模块

Java:根据匹配的字符串/模式对数组进行排序

java - 如何制作按字母顺序对集合进行排序的通用函数

java - Javers 将字段与注释进行比较

java - 在java中实现比较器接口(interface)

java - 如何将列表对象放入JSon对象

从 .zip 文件加载类时出现 java.lang.LinkageError

java - 在循环中调用 Thread.sleep - 重新绘制组件时使用延迟的正确方法是什么?

java - 如何在集合中搜索(使用比较器)