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 > 编译它,所以它不应该是编译器版本问题

编辑:简短的回答是肯定的,它编译,长的回答是:阅读接受的答案:)

4

1 回答 1

0

这不是编译时错误。确实是因为您以这种方式编译代码而出现的警告消息,
javac -Xlint:unchecked MyTreeSet.java

其中 ,MyTreeSet.java是您的 java 文件的名称。

您仍然会在您的工作目录中成功生成类文件

于 2013-02-05T19:12:42.193 回答