簡體   English   中英

如何避免嵌套空檢查

[英]How to avoid Nested null check

我想從API中檢索出現在類內部的字段。 是的我知道這違反了德米特法,但我沒有任何選擇。

getClassA().getClassB().getClassC().getClassD().getAccountId();

所以要添加null檢查作為它的壞代碼氣味所以我帶來下面的代碼:

try{
getClassA().getClassB().getClassC().getClassD().getAccountId();
}catch(NullPointerException ex){
 S.O.P("Null Found");
}

要么

ClassA a = getClassA();
if(a!=null){
ClassB b = a.getClassB();
So on.....
}

我的問題是哪個是最好的方法上面提到的或顯式檢索每個類並檢查null並轉到下一級這是違反得墨忒耳法

Null對象設計模式是通過Optional類在Java 8中被吸收的方式,這意味着您有一個包裝器,您可以在其中擁有數據或者您擁有空數據。

它的東西就像

             MyObject
      RealObject    NullObject

而不是傳遞null,你傳遞NullObject,它提供與MyObject相同的接口(可以是具體/抽象/接口類)

這需要Java 8,你是對的。 我認為這將在番石榴中以類似的方式起作用。

public class OptionalTest {

  public static void main(String[] args) {
    A a = new A();
    Optional<A> opa = Optional.ofNullable(a);
    int accid = opa.map(A::getClassB).map(A.B::getClassC).map(A.B.C::getClassD).map(A.B.C.D::getAccountID).orElse(-1);

    if (accid > -1) {
      System.out.println("The account id is: " + accid);
    } else {
      System.out.println("One of them was null. Please play with commenting.");
    }
  }

    static class A {
      B b = new B();
      //B b = null;
      B getClassB() {
        return b;
      }

      static class B {
        //C c = new C();
        C c = null;
        C getClassC() {
          return c;
        }

          static class C {
            D d = new D();
            //D d = null;
            D getClassD() {
              return d;
            }

              static class D {
                private final int accountId = 2;
                int getAccountID() {
                  return accountId;
                }
              }
          }
      }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM