Java 使用可选选项验证输入法参数

Java 使用可选选项验证输入法参数,java,validation,null,guava,nullable,Java,Validation,Null,Guava,Nullable,我想知道检查可能为空的方法参数的最佳方法是什么 第一个合理的方法是使用番石榴: String validatedValue= Optional.fromNullable(input).or("defaultValue"); 第二种合理的方法是使用常规java。对于不懂番石榴的人来说,它可能有容易理解的优势。但是,它仍然显示“低级”代码 或者第三种方法。一方面,在主要方法上看起来不错。另一方面,它可能产生许多小型私有方法 String validatedValue = getValidatedV

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

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

String validatedValue= Optional.fromNullable(input).or("defaultValue");
第二种合理的方法是使用常规java。对于不懂番石榴的人来说,它可能有容易理解的优势。但是,它仍然显示“低级”代码

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

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

目前看来,第二种或第三种方法更好,在这种情况下不应使用可选方法。有人能告诉我在这种情况下的最佳实践是什么吗?

虽然我不会称之为“验证”,但如果为空,则提供deafult的首选方法类似于使用番石榴的#2(如果不是#2本身)(因为番石榴18被放置在):

它在内部做:

return first != null ? first : checkNotNull(second);
通过静态导入,它只是:

String nonNullValue = firstNonNull(input, "empty");
但你会选择哪一种只是偏好的问题


另外,我只会在一种情况下使用
可选
,但对于字符串则不是。仅用于null检查的私有方法有些过分,但如果您对值有其他假设,则通常认为使用具有有意义名称的小型私有方法是一种很好的做法(请参见)。

尽管我不会称之为“验证”,但如果null与#2(如果不是#2本身)相似,则提供deafult的首选方法-使用番石榴(自番石榴18日起,它被放置在:

它在内部做:

return first != null ? first : checkNotNull(second);
通过静态导入,它只是:

String nonNullValue = firstNonNull(input, "empty");
但你会选择哪一种只是偏好的问题


另外,我只会在一种情况下使用
可选
,但对于字符串则不是。仅用于null检查的私有方法有些过分,但如果您对值有其他假设,则通常认为使用具有有意义名称的小型私有方法是一种很好的做法(请参见)。

尽管我不会称之为“验证”,但如果null与#2(如果不是#2本身)相似,则提供deafult的首选方法-使用番石榴(自番石榴18日起,它被放置在:

它在内部做:

return first != null ? first : checkNotNull(second);
通过静态导入,它只是:

String nonNullValue = firstNonNull(input, "empty");
但你会选择哪一种只是偏好的问题


另外,我只会在一种情况下使用
可选
,但对于字符串则不是。仅用于null检查的私有方法有些过分,但如果您对值有其他假设,则通常认为使用具有有意义名称的小型私有方法是一种很好的做法(请参见)。

尽管我不会称之为“验证”,但如果null与#2(如果不是#2本身)相似,则提供deafult的首选方法-使用番石榴(自番石榴18日起,它被放置在:

它在内部做:

return first != null ? first : checkNotNull(second);
通过静态导入,它只是:

String nonNullValue = firstNonNull(input, "empty");
但你会选择哪一种只是偏好的问题



另外,我只会在一种情况下使用
可选
,但对于字符串则不是。仅用于空检查的私有方法是过分的,但如果您对值有其他假设,则通常认为使用具有有意义名称的小型私有方法是一种很好的做法(请参阅)。

这不会验证参数。它将默认值替换为空值。要验证它,请使用
前提条件。checkNotNull()
。如果一个参数不应该为null,那么它就不应该为null,并且应该抛出一个异常来告诉调用方代码它有缺陷。我投票决定以基于意见的方式结束。我猜想大多数程序员会错误地选择第1个选项,但这只是我的意见:-)JBNIZET,实际上,在这种情况下,NULL被允许,但是应该被默认值代替。然后也考虑提供一个重载的方法,而不是采用可空的参数,并在它所采用的方法中强制使用该参数。这通常更干净、更健壮。在这种情况下,这是不可能的。这是一个包含大量参数的web服务。这并不能验证参数。它将默认值替换为空值。要验证它,请使用
前提条件。checkNotNull()
。如果一个参数不应该为null,那么它就不应该为null,并且应该抛出一个异常来告诉调用方代码它有缺陷。我投票决定以基于意见的方式结束。我猜想大多数程序员会错误地选择第1个选项,但这只是我的意见:-)JBNIZET,实际上,在这种情况下,NULL被允许,但是应该被默认值代替。然后也考虑提供一个重载的方法,而不是采用可空的参数,并在它所采用的方法中强制使用该参数。这通常更干净、更健壮。在这种情况下,这是不可能的。这是一个包含大量参数的web服务。这并不能验证参数。它将默认值替换为空值。要验证它,请使用
前提条件。checkNotNull()
。如果一个参数不应该为null,那么它就不应该为null,并且应该抛出一个异常来告诉调用方代码它有缺陷。我投票决定以基于意见的方式结束。我猜想大多数程序员会错误地选择第1个选项,但这只是我的意见:-)JBNIZET,实际上,在这种情况下,NULL被允许,但是应该被默认值代替。然后也考虑提供一个重载的方法,而不是采用可空的参数,并在它所采用的方法中强制使用该参数。这通常更干净、更健壮。在这种情况下,这是不可能的。这是一个包含大量参数的web服务。这并不能验证参数。它将默认值替换为空值。要验证它,请使用
前提条件。checkNotNull()
。如果一个参数不应该为null,那么它就不应该为null,并且应该抛出一个异常来告诉调用方代码它有缺陷。我投票决定以基于意见的方式结束。我怀疑大多数程序员会在选项1上犯错误,但这只是我的观点