什么';在Java中,在默认包中导入类的语法是什么?

什么';在Java中,在默认包中导入类的语法是什么?,java,syntax,import,Java,Syntax,Import,是否可以导入默认包中的Java类?如果是,语法是什么?例如,如果你有 package foo.bar; public class SomeClass { // ... 在一个文件中,您可以编写 package baz.fonz; import foo.bar.SomeClass; public class AnotherClass { SomeClass sc = new SomeClass(); // ... 在另一个文件中。但是如果SomeClass.jav

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

package foo.bar;

public class SomeClass {
    // ...
在一个文件中,您可以编写

package baz.fonz;

import foo.bar.SomeClass;

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

在另一个文件中。但是如果SomeClass.java不包含包声明呢?如何在另一个类中引用某个类?

无法从默认包导入类。除了非常小的示例程序外,应该避免使用默认包

从:

这是一本书 从中导入类型时出现时间错误 未命名的包


访问默认包中的类的唯一方法是从默认包中的另一个类访问。在这种情况下,不要费心导入它,直接引用它。

这是不可能的

另一种选择是使用反射:

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

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


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

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


如果您这样做是为了另一个包,那么这将是一个编译错误。

我相信您只是参考了它。如果它们在默认包中,这意味着它们必须在同一个目录中(或者至少在类路径上)。@Thorbjørn:我现在正在进行培训,没有人知道在戳了五分钟后如何操作。最初,讲师试图说明Eclipse可以通过单击添加缺少的导入语句,但该工具没有选择没有包的类。@mmyers:Hm,我对此很谨慎,因为我对Groovy一无所知。即使如此,看起来我的搜索失败了。谢谢每个班级都有一个包。如果不声明该包,它将被添加到“default”包中,如:“import default.Foo”。自动包含的类位于java.lang中,可以显式导入“import java.lang.String”,但这是多余的。我认为标题有点误导性:“…从默认包导入类…”假设类位于类路径中的包中会更好(不是母语为英语的人,我可能错了)。如果它在类路径中,Eclipse就会找到它,学员也就不用问了。@Kelly,你绝对确定吗?这会因为null对象参数而导致
NullPointer怀疑。@KellyS.French否。该类不在当前包中,无法导入。Eclipse无法帮助。@EJP这是我的观点。如果当前的类加载器没有提到(可访问?)所需的类,那么尝试使用class.forName是没有帮助的。您需要做的是实例化一个新的类加载器,该类加载器提供了类文件的路径,如类文件或JAR等,并使用该类加载器请求所需的类。假设这个类在默认包中,那么它应该可以像Oscar提到的那样加载。啊,很好的答案。简洁,正确,足够详细,没有多余的信息。我想这就是我在JLS中的最后三个答案;也许是时候从头读一遍了。从默认包导入一类默认包怎么样?@ConductedClever这是多余的。不需要导入。这实际上是问题的正确答案。这不是“坏习惯”:这是不可能的。这是不正确的。没有语法允许您在
import
语句中命名默认包中的类。您可以从默认包中的另一个类引用默认包中的一个类,而无需导入它,但这不是问题所在。(这也不是你的答案字面上所说的!)