【问题标题】:Is this how Java package imports are supposed to work?这是 Java 包导入应该如何工作的吗?
【发布时间】:2012-08-03 19:07:58
【问题描述】:

我一直在为我的第一个正则表达式而苦苦挣扎。在编译过程中,PatternMatcher 不断收到cannot find symbol 错误。

我刚刚将import java.util.* 更改为import java.util.regex.*,它就像在做梦一样。

我的印象是importing java.util.*带来java.util.*.* 等等。不是这样吗?我找不到任何解决这个特定问题的文档......

【问题讨论】:

  • 那么是什么原因导致在编译过程中找不到 regex 类,但是一旦我显式导入 regex 包就可以找到?
  • @dwwilson66:可以找到它们,但 Java 通过让您显式导入包来避免递归导入(这会使二进制文件变大)。这当然不是一个坏主意。
  • 让我们看看就像盒子。实用程序是一个盒子(java.util),里面有一些东西(类)和一些盒子(子包)。如果你只是打开(导入)Utilities 框,你还不能得到里面的东西(子包中的类),你仍然需要打开(导入)它们。
  • java.util.regex.Pattern 匹配 java.util.regex.* 但不匹配 java.util.*。您可以只使用 Eclipse 的 Ctrl-Shift-O 为您组织导入。

标签: java import package


【解决方案1】:

不,包导入只获取该包中的直接类(java.* 不会导入所有内容,只会导入诸如 Java.SomeClass 之类的类,而不是 java.util.SomeClass)

【讨论】:

    【解决方案2】:

    导入java.util.*不会导入java.util.*.*

    【讨论】:

    • 有没有办法导入java.util.*.*?那不编译。
    • @Siddhartha 不幸的是,您需要单独通配符导入任何子包。
    • 我明白了。感谢您的回复。
    【解决方案3】:

    是的,这就是包导入在 Java 中的工作方式(并且应该工作)。例如,执行import javax.swing.*; 将导入javax.swing.* 内的所有,但不会 导入子包及其类。

    所以,javax.swing.*不会导入 javax.swing.eventjavax.swing.event.*

    阅读following blog 以获得一些友好的新手建议。

    【讨论】:

    • 甜蜜!感谢您的博客链接。那应该在教科书的某个地方... |:
    • @dwwilson66 也许你的书缺乏关于 Java 语言的正确解释。
    【解决方案4】:

    查看下面链接的链接和引用的摘录。

    http://docs.oracle.com/javase/tutorial/java/package/usepkgs.html

    导入 java.awt.* 会导入 java.awt 包中的所有类型, 但它不导入 java.awt.color、java.awt.font 或任何其他 java.awt.xxxx 包。如果您打算使用类和其他类型 在 java.awt.color 和 java.awt 中,你必须同时导入 包含所有文件的软件包:

    import java.awt.*;
    import java.awt.color.*;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-19
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      相关资源
      最近更新 更多