什么是惯用的:setter采用Optional <t>或只是T?</t>

时间:2014-10-31 18:55:18

标签: java guava

Optional<T>与可以为空的字段一起使用时,让setter采用

是更惯用的吗?
  • Optional<T>
  • 只需T,然后按如下方式进行操作?
public class Bar {
    private Optional<T> foo;

    public void setFoo(T foo) {
        this.foo = Optional.<T>fromNullable(foo);
    }

    public Optional<T> getFoo() {
        return foo;
    }
}

3 个答案:

答案 0 :(得分:6)

我认为两者都没有,只在T内部存储值,并且在API级别只有Optional。

public class Bar {
    private T foo;

    public Optional<T> getFoo() {
        return Optional.<T>fromNullable(foo);
    }

    public void setFoo(T foo) {
        this.foo = foo;
    }
}

答案 1 :(得分:3)

作为一般规则,我建议:

public void setFoo(T foo) {
  this.foo = checkNotNull(foo); // don't allow null at all!
}

然后,如果用户拥有他们知道可能为null的值,他们可以这样做:

if (foo != null) {
  bar.setFoo(foo);
}

答案 2 :(得分:0)

后者将是我的建议。但客观上哪个更具惯用性。

public class Bar {
    private T foo;

    public void setFoo(T foo) {
        this.foo = Optional.<T>fromNullable(foo);
    }
}