SCJP subSet() должен быть приведен к (TreeSet‹Integer›)

Я нашел любопытный вопрос 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>, так что это не должно быть проблемой версии компилятора.

РЕДАКТИРОВАТЬ: Короткий ответ: ДА, ЭТО СОСТАВЛЯЕТСЯ, а длинный: прочитайте принятый ответ :)


person luigi7up    schedule 05.02.2013    source источник
comment
Почему вас удивляет, что необработанное приведение выдает предупреждение компилятору?   -  person Louis Wasserman    schedule 05.02.2013
comment
Я понятия не имел, что компилятор проверяет возможные проблемы с кастингом для вас... Насколько мне известно, компилятор притворялся глупым, когда вы кастовали: stackoverflow.com/questions/10388136/ как вы можете видеть в этом компилятор обсуждения может видеть, что вы пытаетесь сделать что-то глупое, но не предупреждает вас...   -  person luigi7up    schedule 06.02.2013


Ответы (1)


Это не ошибка времени компиляции. Это действительно предупреждающее сообщение, потому что вы скомпилировали свой код таким образом,
javac -Xlint:unchecked MyTreeSet.java

где , MyTreeSet.java — это имя вашего java-файла.

У вас по-прежнему будет успешно создан файл класса в вашем рабочем каталоге

person Vishal K    schedule 05.02.2013
comment
О, спасибо... Я увидел, что это предупреждение о компиляции, и догадался, что компиляция не удалась... Однако я скомпилировал без -Xlint... - person luigi7up; 06.02.2013