假设我有一个带三个参数的函数。当然,我可以通过这种方式检查这个函数的任何两个参数是否为空。
returnType function(p1, p2, p3){
if((p1 == null && p2 == null) || (p2 == null && p3 == null) || (p3== null && p1 == null)){
return;
}
}
但这相当麻烦,不能扩展到更多的参数。
这样做的优雅方法是什么?
提前致谢。
答案 0 :(得分:6)
returnType function(p1, p2, p3){
Object[] args = {p1, p2, p3};
if(Collections.frequency(Arrays.asList(args), null) >= 2) {
return;
}
}
答案 1 :(得分:3)
可能重构方法以传递List<Object>
或类似的方法,然后迭代列表以检查空值的数量。
答案 2 :(得分:3)
但这相当麻烦,不能扩展到更多的参数。
此外,这不会编译。您需要为每个参数添加与null
的比较,如下所示:
if((p1 == null && p2 == null )
|| (p2 == null && p3 == null)
|| (p3 == null && p1 == null)) ...
如果您需要扩展到更多参数,请执行以下操作:
int count = 0;
if (p1 == null) count++;
if (p2 == null) count++;
if (p3 == null) count++;
// ... and so on
if (count >= 2) {
...
}
答案 3 :(得分:1)
将参数传递给
public void someMethod(Object... param){// your code }
您将获取param作为Object数组,然后遍历数组以检查空值。一旦你的计数达到2,就打破循环并宣告失败。
static void check(Object... param)
{
int count= 0;
for (int i = 0; i < param.length; i++)
// check param[i] and increase count
return count;
}
编辑1:
如果您不熟悉java中的变量参数,我建议您阅读https://today.java.net/pub/a/today/2004/04/19/varargs.html
答案 4 :(得分:1)
使用Java 5的智能解决方案是一种varargs验证功能。
您可以创建一个实用程序验证函数,该函数接受varargs对象参数,并检查它们是否都不为空。
然后,当您发现两个以上的参数为空时,您可以迭代数组并停止循环。
boolean validate(int maxNull, Object... params) {
int count = 0;
if (params == null) {
return true;
}
for (Object param : params) {
if (param == null) {
count++;
}
if (count >= maxNull) {
return false;
}
}
return true;
}
使用此实用程序功能,您可以检查所有参数,并在找到更有效的参数时更改测试策略。
答案 5 :(得分:0)
您始终可以在try
区块和catch
NullPointerException
String foo(Object p1, Object p2, Object p3){
String bar;
try {
bar = p1.toString() + p2.toString();
return bar;
} catch (NullPointerException e) {
return null;
}
}
答案 6 :(得分:0)
尝试另一种检查方式,
boolean isAtleastTwoNull = (p1==null )? (p2== null || p3==null): (p2==null && p3==null);