[英]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.