2012-08-30 131 views
2

我有一个函数需要三个字符串,并且它们中的任何一个或全部三个可能为null(事先不知道)。处理这个问题的最好方法是什么?java:如何在多个函数参数中同时处理null?

基本情况是这样的:

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 

我想我能重载这对所有的三种投入中可能的空值置换,但是有没有更好的方法?

+0

目前尚不清楚你想要什么来实现,或者验证正在发生。 –

+1

因为NULL类型与java.lang.String不匹配,所以在执行任何操作之前函数失败。所以我甚至从来没有把它放在函数里面 – vasek1

+0

如果字符串为空,你还在用全部3个参数调用方法吗? – Quinma

回答

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

我不知道怎么去解决你的问题,但如果你只是想更容易检查,你可以做一个效用函数来检查,如果任何参数为空:

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可以为你做的东西太..

0

不知道什么最终导致你想要的。如果你说你的doStuff只是做一个字符串连接,你不必在一个空,然后做..

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); 
} 
相关问题