java - 对未知类型的数组列表进行排序,如果对象不可比较则抛出异常

标签 java exception generics

这是我的带有排序方法的测试类:

public class Main {
    public static void main(final String[] args) {
        ArrayList<Person> people = new ArrayList<Person>();

        Person person1 = new Person("Jonas", 36);
        Person person2 = new Person("Petras", 16);

        people.add(person1);
        people.add(person2);

        ArrayList<Integer> ints = new ArrayList<Integer>();
        ints.add(6);
        ints.add(5);

        ints = Main.sortAscending(ints);

        System.out.println(ints);
    }

    public static <T extends Comparable<? super T>> ArrayList<T> sortAscending(
            final ArrayList<T> list) {
        Collections.sort(list);
        return list;
    }
}

只要我传入基本类型列表:字符串、整数等,它就可以正常工作。但是,当我尝试传入对象列表时,它不起作用。

这是我的类(class):

public class Person {
    final String name;
    final int age;

    public Person(final String name, final int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return String.format("{name=%s, age=%d}", name, age);
    }
}

class AgeComparator implements Comparator<Person> {
    @Override
    public int compare(final Person person1, final Person person2) {
        return person1.age < person2.age ? -1 : person1.age == person2.age ? 0 : 1;
    }
}
  1. 如何使我的方法 sortAscending 与我的类一起使用?
  2. 如何引发我传入的对象未实现比较方法的异常?

最佳答案

将比较器的实例发送到 sort():

Collections.sort(list, new AgeComparator());

关于java - 对未知类型的数组列表进行排序,如果对象不可比较则抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19480759/

相关文章:

java - 在 Java 中使用正则表达式解析 wikiText

c++ - 抛出异常后,对象内部分配的指针是否会自动释放?

java - ClassNotFoundException 错误。 Eclipse IDE 出现问题

C# 将 List<int> 转换为 List<double>

c# - 是否可以为类型参数指定通用约束以从另一种类型转换?

java - 为什么泛型不能扩展 Java 中的非泛型类?

java - 在 arraylist for 循环中执行 Collections.swap() 是否安全?

Java 1.5 脚本引擎

python - Python 中的停止迭代

java - 通用方法采用唯一参数并返回唯一参数Java