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

2022-09-02 01:52:21

我在 debian 5 上使用 java

java 版本 “1.6.0_20”
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)

为什么以下两者之间存在差异

案例1:

import java.util.*;

案例2:

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

为什么第一种情况不涵盖第二种情况?

仅当显式导入数组和 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);
        }

}

当我注释掉第 2 个和第 3 个导入语句时,我遇到的错误是:

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$

答案 1

我刚刚编译了它,它编译得很好,没有隐式导入,可能你看到一个陈旧的缓存或你的IDE的东西。

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

我有完全相同的版本:

here it is

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

更新

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


答案 2

区别

import java.util.*;

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

当代码引用其他或(例如,在同一包中,或通常也导入)时,变得明显。在第一种情况下,编译器将假定在同一包中声明的是要使用的包,在后一种情况下,由于它是专门声明的,因此将使用更具体的包。ListArraysArraysjava.util.Arrays