2013-02-05 43 views
0

我發現了一個奇怪的SCJP問題,起初看起來好像是正確的回答:SCJP子集()必須被強制轉換爲(TreeSet的<Integer>)

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>所以它不應該是編譯器的版本問題

編輯編譯它:簡短的答案是肯定的,它編譯和一個長是:閱讀接受的答案:)

+0

爲什麼你意外的是,原投給了編譯器警告你 成功生成的類文件? –

+0

我不知道編譯器檢查可能的鑄造問題對你來說......據我所知,編譯器演奏愚蠢當你施放:http://stackoverflow.com/questions/10388136/java-casting-resulting-in-run-時間錯誤,而不是編譯錯誤,你可以在這個討論中看到編譯器可以看到你正在嘗試一些愚蠢的東西,但並不警告你... – luigi7up

回答

0

這不是編譯時錯誤。這確實是警告信息,因爲你用這種方式編譯你的代碼
javac -Xlint:unchecked MyTreeSet.java

其中,MyTreeSet.java是你的java文件的名稱。

你仍然有工作directoy

+0

哦,謝謝...我看到它是一個編譯警告並猜測編譯失敗......我編譯時沒有-Xlint,但是...... – luigi7up

相關問題