这是我的例子:我想知道是否可以传递一个用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
还有替代方案吗?
答案 0 :(得分:0)
不幸的是,这是不可能的。当值最初为null
时,您将传递null
引用。稍后您使用srcN = new Source();
初始化它,但之后您将重写源代码。
您可以使用Reference<Source>
解决此问题。但这只会使代码更加繁琐。此外,Source
类是将其作为空源传递的完美候选者,然后使用setString()
将其初始化。
我错过了什么吗?你的代码问题是什么?