スレッド "main" の例外 java.lang.ClassCastException: クラス itheima11.student1 をクラス java.lang.Com パラブルにキャストできません(itheima11.student1 は 'app' のローダーの名前のないモジュールにあり、java.lang.Comparable は 'bootstrap' のローダーの java.base モジュールにあります)
at java.base/java.util.TreeMap.compare(TreeMap.java:1569)
at java.base/java.util.TreeMap.addEntryToEmptyMap(TreeMap.java:776)
at java.base/java.util.TreeMap.put(TreeMap.java:785)
at java.base/java.util.TreeMap.put(TreeMap.java:534)
at 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)
メソッドが含まれています。