2

3 つの文字列を受け取る関数があり、それらのいずれかまたは 3 つすべてが null である可能性があります (事前にはわかりません)。これを処理する最善の方法は何ですか?

基本ケースは次のとおりです。

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

いずれかの文字列で null を使用してこれを呼び出すと、次のエラーが発生します。

-> 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 つの入力の null のすべての可能な順列に対してこれをオーバーロードできると思いますが、より良い方法はありますか?

4

3 に答える 3

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もあなたのために何かをすることができます..

于 2012-08-30T18:46:16.080 に答える
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 に答える
0

あなたが望む最終結果がわからない。doStuff が文字列の連結を行うだけで、その中に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 に答える