【发布时间】:2015-12-17 16:12:37
【问题描述】:
我很难理解静态类在以下场景中的使用方式。
假设我声明一个类如下:
public class TestLibrary {
private static final TestLibrary library = new TestLibrary();
private ErrorHandler errorHandler = null;
public static TestLibrary getLibrary() {
return library;
}
public ErrorHandler getErrorHandler() {
return errorHandler;
}
public int run(String[] args) {
this.initialize(args);
}
private void initialize(String[] data) {
library.errorHandler = new ErrorHandler();
}
}
我现在把班级稍微改成
private void initialize(String[] data) {
errorHandler = new ErrorHandler();
}
我在其他类中声明errorHandler如下:
private ErrorHandler errorHandler = TestLibrary.getLibrary().getErrorHandler();
当我在其他类中使用errorHandler 的实例时,我的代码最终仍然可以正常工作,但我不明白为什么。
问题 1:不应该在第二种情况下创建一个 new ErrorHandler,它是对象 TestLibrary.errorHandler 而不是 library.errorHandler 的一部分吗?
问题 2:我做错了吗?能详细点吗?
【问题讨论】:
-
我感觉你想让
TestLibrary成为单身人士,但不知道该怎么做。 -
使用
library.errorHandler = new ErrorHandler(),您将始终更改library的errorHandler引用的对象。使用errorHandler = new ErrorHandler();,您将更改this对象的errorHandler。 -
@jan Sotirios 是正确的。 ErrorHandler 中没有导入。
-
您正在展示一个在同一类的实例上具有 getter 的类。为什么不直接使用构造函数?
-
@Sotirios Delimanolis 所以,这证实了我的怀疑。它正在更改不同的对象
ErrorHandler。谢谢。