【问题标题】:What's the difference between import java.util.*; and import java.util.stream;? [closed]import java.util.*; 有什么区别?并导入 java.util.stream;? [关闭]
【发布时间】:2017-12-30 22:00:27
【问题描述】:

我正在使用 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 时:java.util.stream; 事情按预期工作。为什么会这样?我没有在程序的其他地方使用Stream 或任何名为“stream”的东西,所以我认为这不是名称冲突吗?

【问题讨论】:

  • 我怀疑第二次尝试是否有效。也许你import java.util.stream.*;?如果使用通配符导入,则只会导入此包中的直接类,而不是子包中的类。因此,使用import java.util.*,您可以导入列出here 的所有类和接口。 Stream 类实际上驻留在java.util.list.stream package 中。
  • 确实 - 导入 java.util.stream.* 将导入 java.util.stream 包中的所有内容。导入 java.util.stream 将失败:error: cannot find symbol
  • 您可能在某处导入了其他一些Stream 类(或者您的包中有一个Stream 类),否则import java.util.*; 会完美运行
  • Recursive import Java的可能重复

标签: java import


【解决方案1】:

我怀疑第二次尝试 (import java.util.stream;) 是否有效。正如JonSkeet 指出的in their comment,它应该会导致编译错误: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)。

【讨论】:

    猜你喜欢
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 2017-04-20
    • 2012-01-15
    • 2017-05-29
    • 1970-01-01
    相关资源
    最近更新 更多