【问题标题】:How to check any two parameters of a function are null如何检查函数的任何两个参数是否为空
【发布时间】:2013-09-12 00:52:06
【问题描述】:

假设我有一个接受三个参数的函数。当然我可以通过这种方式检查这个函数的任何两个参数是否为空。

returnType function(p1, p2, p3){

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

}

但这相当麻烦,并且无法针对大量参数进行扩展。

这样做的优雅方法是什么?

提前致谢。

【问题讨论】:

  • 您在此处建议的繁琐方式不管是否繁琐都行不通。
  • 我知道,只是变短了。我没有完全按照你所看到的语言编写它。
  • 提问时请使用真实代码。
  • (DUPLICATE)在链接stackoverflow.com/questions/271526/… 中回答了一个格式更好的问题

标签: java function parameters coding-style


【解决方案1】:

也许重组方法以传递List<Object> 或类似的,然后迭代列表以检查空值的数量。

【讨论】:

    【解决方案2】:

    您始终可以在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;
       }
    }
    

    【讨论】:

      【解决方案3】:

      但这相当麻烦,并且无法针对大量参数进行扩展。

      此外,这不会编译。您需要为每个参数添加与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) {
          ...
      }
      

      【讨论】:

        【解决方案4】:
        returnType function(p1, p2, p3){
           Object[] args = {p1, p2, p3};
           if(Collections.frequency(Arrays.asList(args), null) >= 2) {
                return;
           }
        }
        

        【讨论】:

        • 你应该测试为>= 2
        • 我以为发帖者想检查 exactly 两个参数是否为 null,但后来意识到事实并非如此。谢谢,已修复。
        • 如果你将你的方法与 var args 结合起来......在我看来你有最好的解决方案。 +1
        【解决方案5】:

        将您的参数传递为 public int someMethod(Object... param){// your code }

        您将获取参数作为 Object 的数组,然后遍历数组以检查空值。一旦你的计数达到 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

        【讨论】:

        • 感谢指出,我已修复并改进了答案。
        【解决方案6】:

        试试这只是另一种检查方式,

        boolean isAtleastTwoNull = (p1==null )? (p2== null || p3==null): (p2==null && p3==null);
        

        【讨论】:

          【解决方案7】:

          Java 5 的智能解决方案是可变参数验证函数。

          您可以创建一个接受可变参数对象参数的实用程序验证函数,并检查它们是否都不为空。

          然后你可以对数组进行迭代,当发现两个以上的参数为空时停止循环。

          boolean validate(int maxNull, Object... params) {
              int count = 0;
              if (params == null) {
                  return true;
              }
              for (Object param : params) {
                  if (param == null) {
                      count++;
                  }
                  if (count >= maxNull) {
                      return false;
                  }
              }
              return true;
          }
          

          使用此实用功能,您可以检查所有参数,并在找到更有效的测试策略时更改测试策略。

          【讨论】:

          • paramsnull 时不应返回true
          • 我同意,Ravi:这是一个取决于需求的极端情况。抛出空指针异常可以是另一种方式。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-23
          • 2011-01-23
          相关资源
          最近更新 更多