我遇到了一些java代码,其中包含以下语句。
com.myproject.bar.Foo foo = new com.myproject.bar.Foo();
类com.myproject.bar.Foo
尚未导入到类中,但在编写此语句的类中创建了Foo
的对象。
为什么要实施这样的实施?使用这样的实现比导入类Foo
?
答案 0 :(得分:7)
使用类的完全限定名称进行实例化。
com.myproject.bar.Foo foo = new com.myproject.bar.Foo();
这不需要添加import
语句,因为您已经告诉编译器哪个是要实例化的类的包。
有时,如果有多个类具有同一个简单名称,则会使用此方法。
如果您愿意这样做:
Foo foo = new Foo();
然后你必须导入这个类:
import com.myproject.bar.Foo;
答案 1 :(得分:5)
导入语句只是通过其短名称使类型可用,而不指定包。就是这样。如果没有导入,就不能使用该类。
通常使用导入更清楚,但有时候这是不可能的 - 例如,您可能希望使用两个名为Foo
的类,这些类来自具有相同类的不同包。 (当您有两个相同实体的表示时,这是最常见的 - 例如,API表示和存储表示。)
在不知道真实代码是什么样的情况下,我们无法分辨这是否是这种情况,或者导入是否合适。如果可以工作,导入通常更具可读性。
答案 2 :(得分:1)
如果您使用完全限定名称(例如com.myproject.bar.Foo
,)来解决课程,那么当您尝试访问该课程时,您需要每次都指定。
但是在导入的情况下,你不需要。
优势之一。
答案 3 :(得分:0)
没有特别的优势。
但是如果两个类具有相同的类名并且属于不同的包,则需要指定完全限定的包名,以便在类中使用它们时区分它们。
考虑2个班级
com.myproject.bar.Foo
com.myproject.bar.innerbar.Foo
现在在其他一些课程中你会像
那样进行实例化Foo foo = new Foo();
现在导入哪个Foo
?
为避免这种歧义,我们需要指定完整的包名。
答案 4 :(得分:0)
com.myproject.bar.Foo
是绝对的类名。
Foo
只是类名(相对),它可以在任何包中,因此要指定包,使用import
语句。
如果您有多个具有相同名称的类,则必须在代码中使用绝对类名来区分重复的名称。示例com.Foo
和org.Foo
然后您对Foo
使用com.Foo
而org.Foo
使用org.Foo
。