0

有效的java清楚地表明了一个assert用于验证私有函数的参数。如果方法是公共方法,则如果 null 是无效参数,则该方法应抛出 NPE。

例如:

public void foo (Sting str) {
   char[] ch = str.toCharArray();
}

在上面的代码中,我们不需要显式检查来确保str为 null,或者不是 null.toCharArray 将抛出 NPE

但是,如果代码更改为以下内容怎么办:

   public void foo (String str) {
      List<String> strList = new ArrayList<String>();
      bar (str, strList);
   }

   private void bar(String str, strList) {
        assert strList != null;
        char[] ch = str.toCharArray();
        ... ... .. 
   }

在这样的代码中,它落在私有函数栏上以抛出 NPE。根据有效的java,私有代码只能通过断言进行验证。下面的代码会被认为比上面的代码更好吗?

 public void foo (String str) {
          if (str == null)  throw NPE;
          List<String> strList = new ArrayList<String>();
          bar (str, strList);
       }

       private void bar(String str, strList) {
            assert str != null;
            assert strList != null;
            char[] ch = str.toCharArray();
            ... ... .. 
       }
4

1 回答 1

2

在您的公共方法 foo 中,您有以下内容

if (str == null) throw new NullPointerException;

这通常称为保护子句,通常比不包含任何内容而引发空指针异常更具可读性。

关于断言,正如@Sotirios 所提到的,它通常不会在生产代码中使用。查看此答案以获取更多信息: Java assertions underused

这里肯定有一些更好的主观性,但是从可读性的角度来看,公共方法中的保护子句似乎更具可读性。断言没有提供额外的价值,特别是如果该私有方法仅从该一个公共方法调用时。断言永远不会触发。

于 2013-11-29T03:58:10.807 回答