【问题标题】:What's the syntax to import a class in a default package in Java? [duplicate]在 Java 的默认包中导入类的语法是什么? [复制]
【发布时间】:2011-01-03 01:29:23
【问题描述】:

是否可以在 Java 中导入默认包中的类?如果是这样,语法是什么?例如,如果您有

package foo.bar;

public class SomeClass {
    // ...

在一个文件中,你可以写

package baz.fonz;

import foo.bar.SomeClass;

public class AnotherClass {
    SomeClass sc = new SomeClass();
    // ...

在另一个文件中。但是如果 SomeClass.java 不包含包声明怎么办? AnotherClass 中的 SomeClass 怎么引用?

【问题讨论】:

  • 相信你只是参考一下。如果它们在默认包中,则意味着它们必须在同一目录中(或至少在类路径中)。
  • @Thorbjørn:我现在正在训练中,戳了五分钟后没人知道该怎么做。最初,讲师试图说明 Eclipse 可以一键添加缺少的导入语句,但该工具没有选择没有包的类。
  • @mmyers:嗯,我对此很警惕,因为我对 Groovy 的了解为零。即便如此,看起来我的 SO-search-fu 还是失败了。谢谢!
  • 每个类都有一个包。如果你不声明包,它会被添加到“默认”包中,如下所示:“import default.Foo”。自动包含的类在 java.lang 中,可以显式导入“import java.lang.String”,但会是多余的。
  • 我认为标题有点误导:“...从默认包中导入一个类...”会更好(不是以英语为母语的人,我可能错了)

标签: java syntax import


【解决方案1】:

您不能从默认包中导入类。除了非常小的示例程序之外,您应该避免使用默认包。

来自Java language specification

这是一个编译 导入类型的时间错误 未命名的包。

【讨论】:

  • 啊,很好的答案。简洁,正确,足够详细,没有多余的信息。我认为这是我从 JLS 获得的最后三个答案;可能是时候从头到尾阅读了。
  • 从默认包导入到默认包的类怎么办?
  • @ConductedClever 这将是多余的。无需导入。
【解决方案2】:

访问默认包中的类的唯一方法是从默认包中的另一个类。那样的话,不用import了,直接参考就好了。

【讨论】:

  • 这其实是这个问题的正确答案。
【解决方案3】:

这是不可能的。

另一种方法是使用反射:

 Class.forName("SomeClass").getMethod("someMethod").invoke(null);

【讨论】:

  • 假设该类位于 CLASSPATH 的包中。如果它在 CLASSPATH 中,Eclipse 会找到它,而受训者不必询问。
  • @Kelly,你确定吗?
  • 这将导致NullPointerEsception,因为空对象参数。
  • @KellyS.French 否。该类不在当前包中,无法导入。 Eclipse 帮不上忙。
  • @EJP 那是我的观点。如果当前类加载器未提及(可达?)所需的类,那么尝试使用 Class.forName 将无济于事。您需要做的是实例化一个新的类加载器,该类加载器已提供类文件的路径,如类文件或 JAR 等,并使用该类加载器来请求所需的类。假设如果该类在默认包中,那么它应该可以按照 Oscar 提到的方式加载。
【解决方案4】:

正如其他人所说,这是一种不好的做法,但是如果您因为需要与使用默认包的第三方库集成而别无选择,那么您可以在默认包中创建自己的类并以这种方式访问​​另一个类。默认包中的类基本上共享一个命名空间,因此即使其他类位于单独的 JAR 文件中,您也可以访问它。只需确保 JAR 文件位于类路径中即可。

如果您的类不在默认包中,则此技巧不起作用。

【讨论】:

  • 这不是“坏习惯”:这是不可能的。
【解决方案5】:

这根本不是编译错误!您只能将默认包导入默认包类。

如果你对另一个包这样做,那么它应该是一个编译错误。

【讨论】:

  • 这是不正确的。没有语法允许您在import 语句中命名默认包中的类。您可以从默认包中的另一个类中引用默认包中的一个类而不导入它,但这不是问题所要问的。 (这也不是你的回答字面意思!)
猜你喜欢
  • 1970-01-01
  • 2023-01-25
  • 2010-12-05
  • 2014-01-01
  • 2015-11-14
  • 2017-09-10
  • 2016-11-06
相关资源
最近更新 更多