"main" スレッドでの例外: java.lang.ClassCastException: クラス itheima11.student1 はクラス java.lang.Comparable にキャストできません (itheima11.student1 はローダー 'app' の名前のないモジュールにあり、java.lang.Comparable はローダー 'bootstrap' のモジュール java.base にあります)
位置: java.base/java.util.TreeMap.compare (TreeMap.java:1569)
位置: java.base/java.util.TreeMap.addEntryToEmptyMap (TreeMap.java:776)
位置: java.base/java.util.TreeMap.put (TreeMap.java:785)
位置: java.base/java.util.TreeMap.put (TreeMap.java:534)
位置: java.base/java.util.TreeSet.add (TreeSet.java:255)
このエラーメッセージは、オブジェクトを互換性のない型に強制的にキャストしようとした場合に発生します。
ここでは、itheima11.student1 クラスのオブジェクトを java.lang.Comparable クラスに強制的にキャストしようとしていますが、そのクラスは実装されていません。
エラーメッセージは、student1 クラスで Comparable インターフェースを実装する必要があることを示しています。
感想:
TreeSet コレクションの要素が特定のクラスである場合、そのクラスは必ず Comparable インターフェースを実装する必要があります。そうでない場合、エラーが発生します。なぜなら、TreeSet は Comparable インターフェースを実装したクラスのオブジェクトのみをソートできるためです。Comparable インターフェースには、2 つのオブジェクトの大小を比較するための
compareTo(Object o)
メソッドがあります。