为什么导入java.util.*不足以导入流



短版本:

我知道导入*是一种糟糕的做法,最好导入我们明确需要的内容。但是,我很好奇为什么导入util.*不包括util.stream.*

长版本:

如果Iimport java.util.stream.*;

这段代码工作成功:

int[] a = {3, 4, 1};
ArrayList<Integer> list = Arrays.stream(a)
.boxed()
.collect(Collectors.toCollection(ArrayList::new));

但是,如果我从import:中删除stream

import java.util.*;

失败:

Main.java:20: error: cannot find symbol
.collect(Collectors.toCollection(ArrayList::new));
^
symbol:   variable Collectors
location: class Ideone
1 error

我尝试过Java 8(1.8.0_201(:

https://www.onlinegdb.com/online_java_compiler

Java 11(11.0.11+9-Ubuntu-0ubuntu2.04(:

https://www.programiz.com/java-programming/online-compiler/

和Java 12(12.0.1+12(:

https://ideone.com/7XfIFY

您使用的wildcard import导入包not the sub-packages inside it中的所有类。

import java.util.*;

上面的import语句将导入java.util包中的所有Classes,而不是子包,即java.util.stream,所以为了导入它,你需要有像这样的导入语句

import java.util.*;
import java.util.stream.*;

阅读更多关于导入包

虽然包名称看起来更像是层次关系的一种表现,但事实并非如此。

包名称最像是类的前缀。

有关具体说明,请参阅官方文件(软件包的明显层次结构(

最新更新