0

sort メソッドを使用したテストクラスは次のとおりです。

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;
    }
}

文字列、int などのプリミティブ型のリストを渡す限り、正常に動作します。ただし、オブジェクトのリストを渡そうとすると、動作しません。

これが私のクラスです:

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. 渡したオブジェクトに比較メソッドが実装されていない場合、例外をスローするにはどうすればよいですか?
4

2 に答える 2