在Java中分配默认值的标准方法

时间:2012-05-18 15:20:00

标签: java

我常常调用可能返回null值的外来方法。为了避免简单的空检查,如

if (myVariable != null) {
     // do something
}

我有时会指定一个默认值,如下所示:

myVariable = (myVariable == null) ? defaultValue : myVariable;

例如,在Ruby中这似乎有点多余,有||=运算符

我不是要求这样的运算符,但我使用三元运算符的标准方法似乎有点多余或可能也令人困惑?

有哪些更好的方法?

6 个答案:

答案 0 :(得分:3)

试试这个:

if (myVariable == null) {
    myVariable = defaultValue;
}

答案 1 :(得分:0)

如果外来方法可能返回null值,则应注意方法的Java文档中的null返回值。客户端使用那个外来方法必须检查,但没办法,返回值。

执行此操作的简单方法:

retVal = alienMethod();
if (retVal == null) {
    retVal = defaultVal;
}

如果您仍想避免检查空值,则返回值的方法必须负责返回默认值。但是你的默认值是多少?根据您的返回类型,您可以创建一个虚拟类来表示您的默认值,而不是返回空值。

答案 2 :(得分:0)

没有更好/更短/更好的方法来做到这一点......

有人谈到引入一个'?' Java 7中的null值的运算符,但是这个概念已经从发布版本中移出了......也许是针对Java 8的?

https://blogs.oracle.com/darcy/entry/project_coin_final_five

http://viralpatel.net/blogs/2009/10/null-safe-type-java-7-nullpointerexception.html

http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000047.html

答案 3 :(得分:0)

一般来说,没有“优雅”的方式。如果变量是类的字段,则可以在setter或getter中执行。但正确的javadocs(我没有在下面显示!)对于解释nulls会发生什么很重要。 e.g。

   public void setFoo(Foo foo) {
      this.foo = foo != null ? foo : DEFAULT_FOO;
   }

   public Foo getFoo() {
      return foo != null ? foo : DEFAULT_FOO;
   }

答案 4 :(得分:0)

您可以将默认值的赋值包装到一个小的实用程序函数中,并将其放在一个帮助器类中。对于String类型的变量,这将如下所示:

public static String unNull(String val,String defVal) {
    return (val==null ? defVal : val);
}

然后,在你的代码中你可以写

myVariable = unNull(alienMethod(),defaultValue);

使用静态导入,您可以不使用类名称为静态方法的名称添加前缀。

您还可以创建一个通用方法来处理这个问题(模板化两个参数的类型和返回类型),但我不确定它是否可以在没有Class类型的附加参数的情况下工作。

答案 5 :(得分:0)

最后有一种更好的方法:Java 8中的Optional而不是

Foo myVariable = bar();
myVariable = (myVariable == null) ? defaultValue : myVariable;

bar()可能会返回null,现在你可以

Foo myVariable = Optional.ofNullable(bar()).orElse(defaultValue).get()