StringBuffer オブジェクトを TreeSet のキーとして配置しようとしている次のコードがあります。これを行う理由は、変更可能なオブジェクトをキーとして配置できるかどうかを確認するためです。コンパイルエラーは発生しません。しかし、このコードを実行すると、コードの下にあるエラーが発生します。特に、私はこれを取得しjava.lang.StringBuffer cannot be cast to java.lang.Comparable
ます。このエラーは何を示していますか?
javadoc から StringBuffer クラスが final ( public final class StringBuffer
) と宣言されていることがわかりますが、それは不変であり、したがってハッシュ可能であることを意味しませんか?
私はハッシュと不変のものの初心者なので、ここで親切に助けてください。
ありがとう
import java.util.*;
class MutableKeys {
public static void main(String[] args) {
StringBuffer one = new StringBuffer("one");
StringBuffer two = new StringBuffer("two");
StringBuffer three = new StringBuffer("three");
Set<StringBuffer> sb=new TreeSet<StringBuffer>();
sb.add(one);
sb.add(two);
sb.add(three);
System.out.println("set before change: "+ sb);
one.append("onemore");
System.out.println("set After change: "+ sb);
}
}
Exception in thread "main" java.lang.ClassCastException: java.lang.StringBuffer cannot be cast to java.lang.Comparable
at java.util.TreeMap.put(TreeMap.java:542)
at java.util.TreeSet.add(TreeSet.java:238)
at inheritance.MutableKeys.main