【问题标题】:Java imports clarification neededJava 导入需要澄清
【发布时间】:2012-12-05 04:47:52
【问题描述】:

由于我还是 Java 新手,因此我需要澄清如何正确完成导入。

第一:

import java.awt.*;
import java.swing.*;

我假设 * 表示“awt”和“swing”目录下的任何内容。 但我以前见过有人这样做:

import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import java.awt.*;
import java.awt.event.*;
import java.net.URL;
import javax.swing.*;

我是不是误会了什么?还是我只是在寻找冗余?

【问题讨论】:

  • 使用 Eclipse,您可以而且应该利用自动包组织(Ctrl-Shift-O 或 Command-Shift-O,具体取决于您的平台)。话虽如此,请阅读 here 以获取与您的问题直接相关的信息。
  • 伟大的建议 - 感知。完成击键后,我可以在顶部看到必要的导入。不错的功能

标签: java import


【解决方案1】:
import javax.awt.*

将包括包javax.awt 中的所有类,但不包括嵌套在javax.awt 内的任何其他包,例如javax.awt.event。您需要将其用作单独的导入。所有不同名称的包都需要单独包含。

使用import javax.swing.*,您将不需要以下导入:

import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

因为它们是 swing 包的直接子代。

【讨论】:

  • 您的答案后半部分是否有错字... javax.swing.... 类是 awt 包的直接子级?
  • 现在说得通了。我很好奇通配符将包含多远。
【解决方案2】:

在导入语句中,* 表示您想要该包中的所有内容。一般来说,这不是一个好主意 - 您并不需要您所包含的软件包中的所有内容。

在实践中,我已经看到优化的导入 - 只需导入您需要的内容。大多数 IDE,例如 Eclipse、Netbeans 和 IntelliJ 都可以选择为您执行此操作。

【讨论】:

    【解决方案3】:

    使用显式导入并避免使用通配符通常是个好主意,这样您就可以始终准确地知道要导入的内容。但是,JVM 只会在您使用通配符时导入所需的类(而不是从子包中导入),因此不会降低效率(除了编译开销可以忽略不计)。

    这样做不一定是多余的,但在我看来有点尴尬:

    import javax.swing.UnsupportedLookAndFeelException;
    import javax.swing.*;
    

    可能在另一个包中声明了另一个 UnsupportedLookAndFeelException,因此您要确保包含 javax.swing 包中的那个,因此在这种情况下它是显式的。如上所述,您最好的选择是让 IDE 帮助您明确选择所需的导入。

    【讨论】:

      【解决方案4】:

      当您在导入(通配符导入)末尾添加 * 时,您正在导入特定包中包含的所有类,即 com.test.* 。另一方面,当您添加例如一个类时,您将专门导入该特定类,即com.test.TestClass

      但是,在使用第一种方法时,您需要注意可能的类冲突,如此 stackoverflow 线程中所述:Eclipse/Java - is it harmful to import java.(namespace).*?

      因此,我更喜欢第二种方法,因为我可以明确地告诉我打算使用哪个类,并且这样可以使代码更易于阅读

      【讨论】:

        猜你喜欢
        • 2011-11-09
        • 2012-07-18
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 2012-06-02
        • 2017-01-18
        • 2016-06-30
        • 1970-01-01
        相关资源
        最近更新 更多