Answers:
您不能使用命名包中默认包中的类。
(从技术上就可以了,如图Sharique阿卜杜拉的回答通过反射API,但是从无名命名空间的类是不在范围内以进口申报)
在J2SE 1.4之前,您可以使用以下语法从默认包中导入类:
import Unfinished;
这是不再允许。因此,要从打包的类中访问默认的包类,需要将默认的包类移动到自己的包中。
如果您可以访问groovy生成的源,则需要进行一些后期处理,以将文件移动到专用包中并在其开始处添加此“ package”指令。
2014年更新:针对JDK7和JDK8的bug 6975015描述了甚至更严格的禁止从未命名包中导入的规定。
的
TypeName
必须是类的类型,接口类型,枚举类型,或注释类型的规范名称。
该类型必须是命名包的成员,或者是其最外面的词法包围类型是命名包的成员的类型的成员,否则会发生编译时错误。
“为什么[默认程序包]首先出现?设计错误?”
不,这是故意的。
JLS 7.4.2。未命名的软件包说:“ Java SE平台提供的未命名软件包主要是为了在开发小型或临时应用程序或刚开始开发时提供方便。”
其实可以。
使用反射API,您可以访问到目前为止的任何类。至少我能够:)
Class fooClass = Class.forName("FooBar");
Method fooMethod = fooClass.getMethod("fooMethod", String.class);
String fooReturned = (String)fooMethod.invoke(fooClass.newInstance(), "I did it");
val bar = "hi"; val fooClass = Class.forName("FooClass"); val fooMethod = fooClass.getMethod("foo", classOf[Array[String]]); val fooReturned = fooMethod.invoke(fooClass.newInstance(), Array(bar));
Class.forName("FooBar").newInstance().fooMethod("I did it")