【发布时间】:2016-12-16 11:30:06
【问题描述】:
考虑以下三个不同包中的三个 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());
}
}
main 方法属于 test.Test 类,它不导入 user.User 类。但是,它可以在user.User 类型上运行。
如何证明这种行为是正当的?
【问题讨论】:
-
此问题已在 stackoverflow.com/questions/785868/…> 得到答复
-
旁注;与您的问题无关:A)您的工厂可能是“错误的”;拥有一个静态用户对象是没有意义的。大多数程序员会假设调用 factory 类每次都会给他们一个新用户。
-
@Dhananjay - 感谢您的链接。我尝试搜索类似的问题,但找不到。
-
@GhostCat - 已接受。这只是支持我的问题的示例代码,不是真正的工厂。