Я нашел любопытный вопрос 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>, так что это не должно быть проблемой версии компилятора.
РЕДАКТИРОВАТЬ: Короткий ответ: ДА, ЭТО СОСТАВЛЯЕТСЯ, а длинный: прочитайте принятый ответ :)