考虑以下三个不同包中的三个Java类:
User.java
package user;
public class User {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [name=" + name + "]";
}
}
UserFactory.java
package factory;
import user.User;
public class UserFactory {
private static User user;
public static User getUser() {
if (user == null) {
user = new User();
}
return user;
}
}
Test.java
package test;
import factory.UserFactory;
public class Test {
public static void main(String[] args) {
UserFactory.getUser().setName("StackOverflow");
System.out.println(UserFactory.getUser());
}
}
主要方法属于不会导入test.Test
类的类user.User
。但是,它可以在user.User
类型上运行。
如何证明这种行为?
答案 0 :(得分:3)
import
语句的唯一目的是允许您在不完全指定名称的情况下使用import static
的类型(或方法等)。它没有提供类型 - 它只是通过短名称提供。
在这种情况下,导入UserFactory
类型,编译器知道UserFactory.getUser()
返回的确切类型...该类型不需要命名在调用getUser()
的代码中。
如果你想写:
User u = UserFactory.getUser();
然后您需要导入...或者您可以完全符合条件:
user.User u = UserFactory.getUser();
但除非您需要在源代码中引用短名称类型,否则不需要导入语句。