0

最初は正しく答えられたかのように見える興味深い 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で、長い答えは:受け入れられた答えを読んでください:)

4

1 に答える 1

0

コンパイル時エラーではありません。この方法でコードをコンパイルしたために表示された警告メッセージです。
javac -Xlint:unchecked MyTreeSet.java

ここで、MyTreeSet.javaは Java ファイルの名前です。

作業ディレクトリにクラス ファイルが正常に生成されます。

于 2013-02-05T19:12:42.193 に答える