使用null初始化的类Object之间的引用

时间:2017-09-08 10:51:38

标签: java nullpointerexception pass-by-reference

这是我的例子:我想知道是否可以传递一个用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

还有替代方案吗?

1 个答案:

答案 0 :(得分:0)

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

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

我错过了什么吗?你的代码问题是什么?