8

可能重复:
Java 导入混淆

当我阅读播放框架文档时,我发现了这一点。

import play.*;
import play.mvc.*; 

在第一行本身,他们已经导入了 play 包下的所有类。那么第二行有什么用。检查此链接。转到“提供应用程序错误页面”部分。

如果我在进口概念上错了,请纠正我。

4

4 回答 4

18

如果我在进口概念上错了,请纠正我。

你是。

像这样的东西:

import foo.bar.*;

仅从包中导入类型foo.bar。它不会从“子包”中导入,例如foo.bar.baz.

测试这个很容易:

import java.util.*;

class Test {
    public void foo() {
        Pattern p = null;
    }
}

这不会编译,但如果你添加:

import java.util.regex.*;

那么它会的。

Java 并没有真正将包视为形成层次结构。作为人类,我们确实如此,但就 Java 语言而言,包java.util和包java.util.regex完全不相关。

于 2012-12-06T07:26:46.503 回答
2
import play.*;

将导入其中的所有类型;子包内的除外。

import play.mvc.*; 

将导入mvc包内的所有类型,这是play.

您会发现这个答案也很有帮助:Java 导入混淆

于 2012-12-06T07:26:40.697 回答
1

第一行将导入同级别游戏中的所有类、枚举和接口。* 但没有子包。因此,您需要第二行。

于 2012-12-06T07:29:23.347 回答
0

它们是不同的包。Java中没有子包的概念。play.* 导入的类也可能在工作中。*。从 JVM 的角度来看,它们与 play.mvc.* 下的类无关。命名约定只是为了方便您了解这些包是相关的,而 play.mvc 可能在很大程度上依赖于 play。

于 2012-12-06T07:31:11.623 回答