gpt4 book ai didi

java - 使用通配符导入类

转载 作者:搜寻专家 更新时间:2023-10-31 08:13:40 24 4
gpt4 key购买 nike

如果我说:

import java.awt.event.ActionListener;

我得到了 ActionListener 类。如果我说:

import java.awt.event.*;

我得到的事件类包括 ActionListener?或者更好:

import java.awt.*;

我认为如果你包含一个类,就像在最后两个例子中那样,你就有效地导入了那个类并继承了它的所有子类。但是,例如,当我只使用最后一行时,Eclipse 经常显示错误,说它无法解析某些项目,并建议我包括 both java.awt 和 java.awt.event。

最佳答案

Java 中的“通配符”导入仅适用于实现类的直接级别。

也就是说,如果您有类 ABC,它们具有完全限定的名称:

  • com.foo.bar.A;
  • com.foo.bar.B;
  • com.foo.C;

然后导入 com.foo.bar.* 将允许访问 AB,无需再费力;但 C 将不可用。

以同样的方式,导入 com.foo.* 将很容易使 C 可用,但 AB.

现在:

I thought that if you included a class, like in the last two example, that you effectively imported that class and inherited all of its subclasses.

事实并非如此。即使 B“继承”A,如果您选择使用完全限定的导入 com.foo.bar.A,它也不会自动导入 com.foo.bar.B。您必须单独导入 B。这是有道理的:没有什么强制接口(interface)或抽象类的实现与它们的基接口(interface)/基类在同一个包中,例如;在同一个项目中,您可能有两个名为 B 的类,它们位于不同的包中:编译器应该做什么?

现在,根据您自己制定的或在您的工作环境中必须遵守的编码风格约定,此类通配符导入可能会被完全禁止,您将不得不导入 AB 分开。至于静态导入,他们还有其他问题......

最后,请注意,默认情况下,您可以使用所有 java.lang.* 而无需声明导入。

关于java - 使用通配符导入类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16907336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com