我现在和其他人一起在grails项目中工作.我必须编写一些Java类.但我需要访问使用groovy创建的可搜索对象.看来,这个对象必须放在default-package中.
我的问题是:有没有办法从命名包中的Java类访问default-package中的这个对象?
是否可以在Java中导入默认包中的类?如果是这样,语法是什么?例如,如果你有
package foo.bar;
public class SomeClass {
// ...
Run Code Online (Sandbox Code Playgroud)
在一个文件中,你可以写
package baz.fonz;
import foo.bar.SomeClass;
public class AnotherClass {
SomeClass sc = new SomeClass();
// ...
Run Code Online (Sandbox Code Playgroud)
在另一个文件中.但是,如果SomeClass.java不包含包声明呢?你将如何参考SomeClass的AnotherClass?
考虑以下简单的代码示例:
public class TestStaticImport {
static enum Branches {
APPLE,
IBM
}
public static void doSomething(Branches branch) {
if (branch == APPLE) {
System.out.println("Apple");
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我们将尝试编译此代码,我们将收到错误消息:
java: cannot find symbol
symbol: variable APPLE
location: class TestStaticImport
Run Code Online (Sandbox Code Playgroud)
这可以通过引入静态导入来解决enum:
import static ... TestStaticImport.Branches.*
但是在这个时刻(对我来说)难以理解的事情开始了:
这个解决方案工作正常,一切都很好编译,直到类TestStaticImport将被移动到空的根包,即没有任何
package blablabla; 在这个java文件的顶部;
代码行:import static TestStaticImport.Branches.*;在我的Intellij IDEA中突出显示为有效代码(IDE的名称无关紧要,仅供参考),但当我尝试编译此类代码时出现以下错误:
java: package TestStaticImport does not exist
所以,实际上有两个问题:
1)主要问题:为什么不能import static从空目录?
2)除了静态导入之外,允许使用其名称(即APPLE代替Branches.APPLE)的枚举字段的代码引用的另一种方式(如果存在)是什么?
PS请不要告诉我,空包装是丑陋的风格等等.这个问题只是理论问题.
基本上,我希望使用Jar文件中的类的方法,如下所示:

有人可以告诉我使用这些方法和变量需要导入什么吗?