为什么有些Java代码再次导入相同的包?

为什么有些Java代码再次导入相同的包?,java,import,playframework,Java,Import,Playframework,可能重复: 当我阅读play Framework文档时,我发现了这一点 import play.*; import play.mvc.*; 在第一行中,他们已经导入了play包下的所有类。那么第二行有什么用呢。看看这个。转到“提供应用程序错误页”部分 如果我的概念错了,请纠正我 import play.*; 将导入其中的所有类型;除了那些在子包内的 import play.mvc.*; 将导入mvc包中的所有类型,它是play中的子pckage 您会发现这个答案也很有用: 如果我的概

可能重复:

当我阅读play Framework文档时,我发现了这一点

import play.*;
import play.mvc.*; 
在第一行中,他们已经导入了play包下的所有类。那么第二行有什么用呢。看看这个。转到“提供应用程序错误页”部分

如果我的概念错了,请纠正我

import play.*;
将导入其中的所有类型;除了那些在子包内的

import play.mvc.*; 
将导入
mvc
包中的所有类型,它是
play
中的子pckage

您会发现这个答案也很有用:

如果我的概念错了,请纠正我

import play.*;
你是

大概是这样的:

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
是完全不相关的。

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

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

谢谢大家。为我没有专注于基本的事情而感到羞耻。Eclipse对此负责。