java:如何一次处理几个函数参数中的null?

时间:2012-08-30 18:31:21

标签: java

我有一个函数,它接受三个字符串,其中任何一个或全部三个都可能为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

我想我可以为三个输入中的所有可能的空值排列重载这个,但是有更好的方法吗?

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);
}