import java.util。*之间有什么区别?并导入java.util.stream;?

时间:2017-12-30 22:00:27

标签: java import

我正在使用Java 8的Stream功能来操作程序中数组的内容:

Obstacle[] closestObstacles = Stream.generate(() -> new Obstacle()).limit(8).toArray(Obstacle[]::new); // one for each line of attack

当我尝试像这样导入Stream时:import java.util.*;我收到“符号Stream无法解析”错误。当我改为导入Stream时:java.util.stream;事情按预期工作。为什么会这样?我不在我的程序中的其他地方使用Stream或任何名为“stream”的东西,所以我不认为这是名称冲突?

1 个答案:

答案 0 :(得分:4)

我怀疑你的第二次尝试(import java.util.stream;)是否奏效。正如@JonSkeet指出的那样,它应该导致编译错误:error: cannot find symbol。也许你想要import java.util.stream.*;

对于你的实际问题:
如果使用通配符导入,即星号(*)字符,将仅导入此包中的直接类,而不导入子包中的类。因此,使用import java.util.*,您可以导入ArrayListLinkedListRandom等类。可以找到完整列表here。类Stream实际上位于子包java.util.stream包中,并且在您import java.util.*;时未导入。

要导入Stream,您可以import java.util.stream.*;(此软件包中的所有类)或仅import java.util.stream.Stream;(您需要的类的FQDN)。