为什么不导入java.util。* include数组和列表?

时间:2010-12-28 02:45:36

标签: java import

我在debian 5上使用java

  

java版“1.6.0_20”
  Java(TM)SE运行时环境(版本1.6.0_20-b02)
  Java HotSpot(TM)客户端VM(版本16.3-b01,混合模式,共享)

为什么以下

之间存在差异

案例1:

import java.util.*;

案例2:

import java.util.*;
import java.util.Arrays;
import java.util.List;

为什么第一个案例不包括第二个案例?

代码仅在我明确导入Arrays和List时编译。

代码:

import java.util.*;
import java.util.Arrays;
import java.util.List;

public class Test {
        public static void main (String[] args) {
                List<Integer> i = new ArrayList(Arrays.asList(1,2,3,4,5,6,7,8,9,10));
                List<Integer> j = new ArrayList();
                ListIterator<Integer> n = i.listIterator(i.size());

                while(n.hasPrevious()) {
                        j.add(n.previous());
                }

                println(j);

        }

        static void println(Object o) {
                System.out.println(o);
        }

        static void print(Object o) {
                System.out.print(o);
        }

}

当我注释掉第二和第三个导入语句时,我得到的错误是:

nattyp@debian:~/dev/java$ javac Test.java
Test.java:7: cannot find symbol
symbol  : method asList(int,int,int,int,int,int,int,int,int,int)
location: class Arrays
                List<Integer> i = new ArrayList(Arrays.asList(1,2,3,4,5,6,7,8,9,10));
                                                      ^
Note: Test.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error
nattyp@debian:~/dev/java$

4 个答案:

答案 0 :(得分:7)

我刚编译它并且它编译得很好而没有隐式导入,可能你看到过时的缓存或IDE的某些东西。

您是否尝试过从命令行编译?

我的版本完全相同:

here it is

可能你认为警告是错误的。

<强>更新

看起来你正在尝试编译的目录中有一个Arrays.class文件(可能之前创建过)。这就是显式导入解决问题的原因。尝试将源代码复制到干净的新目录,然后重试。你会看到这次没有错误。或者,清理工作目录并删除Arrays.class

答案 1 :(得分:6)

之间的区别
import java.util.*;

import java.util.*;
import java.util.List;
import java.util.Arrays;
当代码引用其他ListArrays时(例如,在同一个包中,或者通常也导入),

变得明显。在第一种情况下,编译器将假定在同一个包中声明的Arrays是要使用的那个,在后者中,因为它是专门声明的,所以将使用更具体的java.util.Arrays。 / p>

答案 2 :(得分:1)

案例1应该有效。我没有看到任何错误。可能还有其他一些问题。我会建议一个干净的构建。

答案 3 :(得分:0)

看一下这个论坛http://htmlcoderhelper.com/why-is-using-a-wild-card-with-a-java-import-statement-bad/。如果您向包中添加新类,并且如果在不同的包中有两个具有相同名称的类,其中只导入其中一个类,则讨论如何使用通配符导致冲突。

更新


它给出了警告,因为你的线实际上应该是

List<Integer> i = new ArrayList<Integer>(Arrays.asList(0,1,2,3,4,5,6,7,8,9,10));
List<Integer> j = new ArrayList<Integer>();

您需要指定数组列表的类型,否则编译器会发出警告,因为它无法识别您是否以类型安全的方式使用列表。