使用Optional可验证输入方法参数

时间:2014-08-26 14:24:57

标签: java validation null guava nullable

我想知道检查可能为空的方法参数的最佳方法是什么。

第一种合理的方法是使用番石榴:

String validatedValue= Optional.fromNullable(input).or("defaultValue");

第二种合理的方法是使用常规java。对于不懂番石榴的人来说,它可能具有易于理解的优点。然而,它仍然显示"低水平"代码。

String validatedValue= input !=null ? input : "empty";

或第三种方法。一方面主要方法看起来不错。另一方面,它可能产生许多小型私人方法。

String validatedValue = getValidatedValue(input); //this private method will contain option two

目前似乎第二种或第三种方法更好,在这种情况下不应使用可选方法。在这种情况下,有人能说出最佳做法吗?

1 个答案:

答案 0 :(得分:3)

虽然我不会称之为“验证”,但提供 deafult if null 的首选方法类似于#2(如果不是#2本身) - 使用Guava的Objects.firstNonNull(从番石榴18放在MoreObjects)中:

String value = Objects.firstNonNull(input, "empty"); // MoreObjects since 18.0
内部做的

return first != null ? first : checkNotNull(second);

使用静态导入它只是:

String nonNullValue = firstNonNull(input, "empty");

但你会使用哪一个只是一个偏好的问题。

P.S。我只在一个案例中使用Optional - if you want lazy evaluated default,但是使用字符串则不是这种情况。仅用于空检查的私有方法是过度的,但如果您对值有其他假设,通常认为使用具有有意义名称的小型私有方法是一种好习惯(参见Clean Code by Uncle Bob)。