Mne*_*nth 95 java groovy default-package
我现在和其他人一起在grails项目中工作.我必须编写一些Java类.但我需要访问使用groovy创建的可搜索对象.看来,这个对象必须放在default-package中.
我的问题是:有没有办法从命名包中的Java类访问default-package中的这个对象?
Von*_*onC 123
您不能在命名包中使用默认包中的类.
(从技术上就可以了,如图Sharique阿卜杜拉的回答通过反射API,但是从无名命名空间的类是不在范围内以进口申报)
在J2SE 1.4之前,您可以使用如下语法从默认包中导入类:
import Unfinished;
Run Code Online (Sandbox Code Playgroud)
那是不允许的.因此,要从打包的类中访问默认包类,需要将默认包类移动到它自己的包中.
如果您可以访问groovy生成的源代码,则需要进行一些后处理以将文件移动到专用包中,并在其开头添加此"package"指令.
更新2014:JDK7和JDK8的错误6975015描述了一个更严格的禁止从未命名的包导入的禁令.
的
TypeName必须是类的类型,接口类型,枚举类型,或注释类型的规范名称.
该类型必须是命名包的成员,或者是最外层词法封闭类型是命名包的成员的类型的成员,否则会发生编译时错误.
小智 60
事实上,你可以.
使用Reflections API,您可以访问任何类到目前为止.至少我能够:)
Class fooClass = Class.forName("FooBar");
Method fooMethod = fooClass.getMethod("fooMethod", String.class);
String fooReturned = (String)fooMethod.invoke(fooClass.newInstance(), "I did it");
Run Code Online (Sandbox Code Playgroud)
小智 7
使用jarjar使用以下规则重新打包jar文件:
rule * <target package name>.@1
Run Code Online (Sandbox Code Playgroud)
源jar文件的默认包中的所有类都将移动到目标包,因此能够访问.
| 归档时间: |
|
| 查看次数: |
74761 次 |
| 最近记录: |