我有一个函数,它接受三个字符串,其中任何一个或全部三个都可能为null(事先不知道)。处理这个问题的最佳方法是什么?
基本情况是:
public String doStuff(String a, String b, String c) {
//do stuff
}
如果在任何字符串中使用nulls调用它,我会收到此错误:
-> doStuff("test", null, null)
Unable to execute method public java.lang.String
doStuff(java.lang.String,java.lang.String,java.lang.String)
on object 1c52ac68 of class test with arguments {Wap:java.lang.String, null, null} of size 3
我想我可以为三个输入中的所有可能的空值排列重载这个,但是有更好的方法吗?
答案 0 :(得分:1)
你可以这样写:
int nulls=0;
if(a==null) nulls+=1;
if(b==null) nulls+=2;
if(c==null) nulls+=4;
然后切换空值:
switch(nulls){
case 0://no String is null
...
break;
case 1://just a is null
...
break;
case 5://(5=101b), a and c is null
...
...
}
等等。
答案 1 :(得分:1)
我不知道如何解决您的问题,但如果您只是想让它更容易检查,您可以创建一个实用程序函数来检查是否有任何参数为null:
public boolean verifyNotNull(Object.. objects) {
for(Object o : objects) {
if(o==null) return false;
}
return true;
}
然后你可以在你的函数中调用这个实用程序:
public String doStuff(String a, String b, String c) {
if(!verifyNotNull(a,b,c)) {
throw new MyException("...");
}
}
也许AOP也可以为你做点什么..
答案 2 :(得分:0)
不确定您想要的最终结果。如果你说你的doStuff只是做一个字符串concat并且你不需要null那么就这样做..
doStuff(String a, String b, String c){
String x = "";
if(null!=a) x = x+a;
if(null!=b) x =x+b;
if(null!=c) x = x+c;
System.out.println(x);
}