如果getter返回空值,是否有更简单的Java方法来创建对象?
例如,在RoR中,如果我没记错的话,可能会出现以下几点:
Obj myObj = getObjFromSomewhere() || new Obj();
将myObj设置为函数返回的对象,如果为null则设置为新的Obj。
在Java中,我发现这样做的最简单方法是:
Obj myObj = (getObjFromSomewhere() != null ? getObjFromSomewhere() : new Obj());
或
Obj myObj = getObjFromSomewhere();
if(myObj == null) {
myObj = new Obj()
}
两者都不太理想,第一个是因为它需要方法调用,这在处理数据库时是不好的,第二个只是因为它很笨重。
答案 0 :(得分:1)
我相信你必须让你的代码更简单:
第一句话调用你的方法两次,这是不必要的。 第二个选项显然不是很笨重,因为你没有其他更简单的方法来使第一个选项更简单。
如果您觉得需要反复使用此方法,我建议创建一个实用程序。
public class NotNullUtility {
private NotNullUtility() {
}
public static <T> T select(T value, T defaultValue) {
if (defaultValue == null)
throw new IllegalArgumentException("Default value must not be null.");
if (value == null) {
return defaultValue;
}
return value;
}
};
Obj obj = NotNullUtility.select(getObjFromSomewhere(), new Obj());
(这基本上是你的第二选择)。
答案 1 :(得分:0)
第二种是正确的方法。我不同意它笨重。这是java,它是语言的语法。
答案 2 :(得分:0)
恕我直言,最优雅的方法是使用Optional类。 (如果您使用的是Java 8或更高版本)。
Obj myObj = Optional.ofNullable(getObjFromSomewhere()).orElse(new Obj())
因此,您只需执行一行,而无需两次调用getObjFromSomewhere()或将其分配给变量。