2017-10-06 69 views
2

我正在嘗試編寫以下代碼,其中CB的子類。而getValue方法僅在C中可用,而不在B中。但是Eclipse是顯示錯誤在此聲明:可選映射類型轉換爲子類對象

Optional.ofNullable(A).map(A::getB).map(C::getValue); 

如果是正常情況下,我們將強制類型轉換,寫像((C)a.getB()).getValue()。我如何根據Optional編寫相同的?

回答

6

您可以將map(C.class::cast)添加到您的連鎖店。

Optional.ofNullable(aOrNull).map(A::getB).map(C.class::cast).map(C::getValue); 

你也可以組合一些你的地圖鏈。

如果getB()從未返回null,你可以只是:

Optional.ofNullable(aOrNull).map(a -> ((C) a.getB()).getValue()); 

要保留Optional如果getB()返回空的空迴避行爲,你可以有:

Optional.ofNullable(aOrNull).map(A::getB).map(b -> ((C) b).getValue()); 
+0

我不得不做地圖(C.class :: cast) – Sandeep