提问人:Pops 提问时间:1/9/2010 最后编辑:Stephen CPops 更新时间:11/3/2018 访问量:148178
在 Java 中将类导入默认包中的语法是什么?[复制]
What's the syntax to import a class in a default package in Java? [duplicate]
问:
是否可以在 Java 中导入默认包中的类?如果是这样,语法是什么?例如,如果您有
package foo.bar;
public class SomeClass {
// ...
在一个文件中,您可以编写
package baz.fonz;
import foo.bar.SomeClass;
public class AnotherClass {
SomeClass sc = new SomeClass();
// ...
在另一个文件中。但是,如果 SomeClass.java 不包含包声明怎么办?你会如何参考?SomeClass
AnotherClass
答:
161赞
Dan Dyer
1/9/2010
#1
不能从默认包导入类。应避免使用默认包,但非常小的示例程序除外。
从 Java 语言规范:
这是一个编译 从 未命名的包。
评论
6赞
Pops
1/9/2010
啊,很好的答案。简明扼要,正确,细节恰到好处,没有多余的信息。我认为这是我在 JLS 中的最后三个答案;可能是时候从头到尾阅读它了。
0赞
ConductedClever
5/5/2017
如何从默认包导入到默认包的类?
1赞
user207421
10/11/2017
@ConductedClever 这将是多余的。无需导入。
59赞
Dan
1/9/2010
#2
访问默认包中的类的唯一方法是从默认包中的另一个类访问。在这种情况下,不要打扰它,直接参考它。import
18赞
OscarRyz
1/9/2010
#3
那是不可能的。
另一种方法是使用反射:
Class.forName("SomeClass").getMethod("someMethod").invoke(null);
评论
0赞
Kelly S. French
1/9/2010
这假定该类位于 CLASSPATH 的包中。如果它在 CLASSPATH 中,Eclipse 就会找到它,而受训者就不必问了。
7赞
Thorbjørn Ravn Andersen
2/13/2011
@Kelly,你确定吗?
0赞
user207421
10/11/2017
这将导致 because of the null 对象参数。NullPointerEsception
0赞
user207421
10/11/2017
@KellyS.法文号该类不在当前包中,无法导入。Eclipse 无能为力。
0赞
Kelly S. French
10/14/2017
@EJP这就是我的观点。如果当前类加载器没有提到(可访问?)所需的类,那么尝试使用 Class.forName 将无济于事。您需要做的是实例化一个新的类加载器,该类加载器已提供类文件的路径,如类文件或 JAR 等,并使用该类加载器请求所需的类。假设如果该类位于默认包中,那么它应该可以按照 Oscar 提到的方式加载。
6赞
Rob H
1/9/2010
#4
正如其他人所说,这是不好的做法,但是如果您因为需要与使用默认包的第三方库集成而别无选择,那么您可以在默认包中创建自己的类,并以这种方式访问其他类。默认包中的类基本上共享一个命名空间,因此即使另一个类驻留在单独的 JAR 文件中,您也可以访问它。只需确保 JAR 文件位于类路径中即可。
如果您的类不在默认包中,则此技巧不起作用。
评论
1赞
user207421
10/11/2017
这不是“坏习惯”:这是不可能的。
4赞
vishal rajput
8/11/2013
#5
这根本不是编译错误!您只能将默认包导入到默认包类。
如果对另一个包这样做,则应为编译错误。
评论
3赞
Stephen C
11/3/2018
这是不正确的。没有任何语法允许您在语句中命名默认包中的类。您可以从默认包中的另一个类引用默认包中的类,而无需导入它,但这不是问题所要问的。(这也不是你的答案字面意思!import
评论