2

我有一个接收三个字符串的函数,它们中的任何一个或所有三个都可能为空(事先不知道)。处理这个问题的最佳方法是什么?

基本情况是这样的:

public String doStuff(String a, String b, String c) {
  //do stuff
}

如果在任何字符串中使用空值调用它,我会收到此错误:

-> 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

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

4

3 回答 3

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
    ...
    ...
}

等等。

于 2012-08-30T18:42:29.823 回答
1

我不知道如何解决您的问题,但如果您只是想让检查变得更容易,您可以创建一个实用函数来检查是否有任何参数为空:

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也可以为你做点什么……

于 2012-08-30T18:46:16.080 回答
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);
}
于 2012-08-30T18:50:03.880 回答