我發現了一個奇怪的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>所以它不應該是編譯器的版本問題
編輯編譯它:簡短的答案是肯定的,它編譯和一個長是:閱讀接受的答案:)
爲什麼你意外的是,原投給了編譯器警告你 成功生成的類文件? –
我不知道編譯器檢查可能的鑄造問題對你來說......據我所知,編譯器演奏愚蠢當你施放:http://stackoverflow.com/questions/10388136/java-casting-resulting-in-run-時間錯誤,而不是編譯錯誤,你可以在這個討論中看到編譯器可以看到你正在嘗試一些愚蠢的東西,但並不警告你... – luigi7up