class 对象之间的引用用 null 初始化

Referencing between class Object initialized with null

这是我的例子:我想知道是否可以传递一个用 null 初始化的参数,然后用正确的值初始化对象。

private class Source {
  String str;
  String getStringValue() {
    return str;
  }
  void setStringValue(String str) {
    this.str = str;
  }
}

private class UserSource {
  Source src;
  UserSource(Source src) {
    this.src = src;
  }
  String getValue() {
    return src.getStringValue();
  }
  void setValue(String str) {
    src.setStringValue(str);
  }
}

现在我是怎么用的。

  Source srcW = new Source();
  UserSource userSourceW = new UserSource(srcW);
  srcW.setStringValue("Second Value");
  System.out.println("From UserSource:" + userSourceW.getValue());
  userSourceW.setValue("Is not Second");
  System.out.println("From Source:" + srcW.getStringValue());

输出:

From UserSource:Second Value
From Source:Is not Second

但是,想知道是否可以像这样使用:

  Source srcN = null;  // YES I want to assign Not initialized!
  UserSource userSourceN = new UserSource(srcN);
  srcN = new Source();
  srcN.setStringValue("First Value");
  System.out.println("From UserSource:" + userSourceN.getValue());

当然输出是

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

还有其他选择吗?

很遗憾,这是不可能的。当值最初为 null 时,您将传递 null 引用。稍后你用 srcN = new Source(); 初始化它,但你正在重写源代码。

您可以使用 Reference<Source> 解决它。但这只会使代码更加繁琐。此外,Source class 是将其作为空源传递的完美候选者,然后稍后使用 setString().

对其进行初始化

我错过了什么吗?你对代码有什么问题?