2012-08-30 98 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); 
} 
相關問題