最初は正しく答えられたかのように見える興味深い SCJP の質問を見つけました。
TreeSet<Integer> s = new TreeSet<Integer>();
TreeSet<Integer> subs = new TreeSet<Integer>();
for(int i = 606; i < 613; i++)
if(i%2 == 0) s.add(i);
subs = (TreeSet)s.subSet(606,true, 630,true);
s.add(629);
s.add(630);
System.out.println(s + " " + subs);
私は、これが [606, 608, 610, 612, 629, 630] [606, 630] を印刷するという意見を他の人と共有しました。私はそれをコンパイルしようとしましたが、驚いたことに、コードが警告付きのコンパイルエラーを出すことがわかりました:
__[unchecked] unckecked conversion__
found: java.util.TreeSet
required: java.util.TreeSet(java.lang.Integer)
次のように s.subset をキャストするとコンパイルされます。
subs = (TreeSet<Integer>)s.subSet(606,true, 630,true);
ネット上でこれに似たさまざまな例を見つけましたが、このコードがコンパイルされないとは誰も言いません。私はここで正しい答えについて混乱しています
コンパイラ 1.6 でコンパイルしているので、コンパイラのバージョンの問題ではないはずです。
編集:短い答えはYES、IT COMPILESで、長い答えは:受け入れられた答えを読んでください:)