Java Null对象或对象创建?

时间:2013-07-17 20:53:08

标签: java ruby-on-rails hibernate

如果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()
}

两者都不太理想,第一个是因为它需要方法调用,这在处理数据库时是不好的,第二个只是因为它很笨重。

3 个答案:

答案 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()或将其分配给变量。