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

可能重复: 如何访问默认包中的Java类?


是否有可能在默认包中的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

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

从Java语言规范 :

从未命名包中导入types是编译时错误。

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

这是不可能的。

另一种方法是使用reflection:

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

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

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

正如其他人所说,这是不好的做法,但如果您没有select,因为您需要与使用默认包的第三方库集成,那么您可以在默认包中创build自己的类,并访问其他类那样。 默认包中的类基本上共享一个名称空间,所以即使它驻留在单独的JAR文件中,也可以访问其他类。 只要确保JAR文件在类path中。

如果你的类不在默认包中,这个技巧是行不通的。