2

3 つのパラメーターを受け取る関数があるとします。もちろん、この方法で、この関数の任意の 2 つのパラメーターが null であることを確認できます。

returnType function(p1, p2, p3){

  if((p1 == null && p2 == null) || (p2 == null && p3 == null) || (p3== null && p1 == null)){
       return;    
   }

}

しかし、これはかなり面倒で、より多くのパラメータに対応できません。

これを行うためのエレガントな方法は何でしょうか?

前もって感謝します。

4

7 に答える 7

8
returnType function(p1, p2, p3){
   Object[] args = {p1, p2, p3};
   if(Collections.frequency(Arrays.asList(args), null) >= 2) {
        return;
   }
}
于 2013-09-08T11:05:23.500 に答える
4

しかし、これはかなり面倒で、より多くのパラメータに対応できません。

さらに、これはコンパイルされません。null次のように、パラメータごとに比較を追加する必要があります。

if((p1 == null && p2 == null )
|| (p2 == null && p3 == null)
|| (p3 == null && p1 == null)) ...

より多くのパラメーターにスケーリングする必要がある場合は、次のようにします。

int count = 0;
if (p1 == null) count++;
if (p2 == null) count++;
if (p3 == null) count++;
// ... and so on
if (count >= 2) {
    ...
}
于 2013-09-08T11:03:44.253 に答える
3

メソッドを再構築して aList<Object>または類似のものを渡し、リストを繰り返して null の数を確認します。

于 2013-09-08T11:02:07.340 に答える
2

パラメータを次のように渡します public int someMethod(Object... param){// your code }

パラメータをオブジェクトの配列として取得し、配列を反復してnullをチェックします。カウントが 2 に達したらすぐに、ループを中断して失敗を宣言します。

static int check(Object... param)
{
   int count= 0;
   for (int i = 0; i < param.length; i++)
        // check param[i] and increase count
   if(param[i] == null){
      count++;
   }
   // return count, this is the number of null parameters to the function.
   return count;
}

編集1:

Java の変数引数が初めての場合は、https://today.java.net/pub/a/today/2004/04/19/varargs.htmlを読むことをお勧めします。

于 2013-09-08T11:13:10.300 に答える
0

いつでもコードをtryブロックで実行でき、catch NullPointerException

String foo(Object p1, Object p2, Object p3){
  String bar;
  try {
       bar = p1.toString() + p2.toString();
       return bar;
   } catch (NullPointerException e) {
       return null;
   }
}
于 2013-09-08T11:02:14.073 に答える
0

これをチェックする別の方法を試してください。

boolean isAtleastTwoNull = (p1==null )? (p2== null || p3==null): (p2==null && p3==null);
于 2013-09-08T11:14:03.547 に答える