ABAP 740的新語(yǔ)法:
上圖的代碼相當(dāng)于:
DATA: ls_data LIKE LINE OF it_data.READ TABLE it_data INTO ls_data WITH KEY object_ext = cl_crm_prodil_bo_names=>gc_prod_root.CALL METHOD add_data EXPORTING ir_child_object = ir_root_object is_data = ls_data.由此可見新語(yǔ)法比較簡(jiǎn)潔,能少寫3行代碼。但是這樣有一個(gè)缺陷,在新語(yǔ)法下如果it_data內(nèi)表內(nèi)不存在object_ext的值為cl_crm_prodil_bo_names=>gc_prod_root的記錄,就會(huì)終止程序執(zhí)行,拋出異常CX_SY_ITAB_LINE_NOT_FOUND.
針對(duì)這種情況,ABAP也有對(duì)應(yīng)的解決方案。
下圖的第17行會(huì)拋出異常,而19行不會(huì),從語(yǔ)義上容易理解:如果內(nèi)表lt_data里不存在name為Spring2的記錄,則返回開發(fā)者使用DEFAULT關(guān)鍵字指定的一個(gè)結(jié)構(gòu)作為默認(rèn)值。
在Java 8也有類似機(jī)制。為了避免臭名昭著的NullPointerException,Java開發(fā)人員在使用對(duì)象的實(shí)例方法之前,需要檢查對(duì)象實(shí)例是否不為null:
if( xx != null ){ xx.doSomething();}在Java 8里,在包java.util里提供了一個(gè)新的工具類Optional,看看它的用法。
第11行的filter方法,語(yǔ)義上應(yīng)該返回一個(gè)null,因?yàn)槲以诘?0行初始化的字符串常量的長(zhǎng)度顯然大于6. 但是調(diào)用這個(gè)filter方法的對(duì)象是一個(gè)Optional對(duì)象,所以最終filter方法最終也返回一個(gè)Optional對(duì)象,這個(gè)對(duì)象包裹了一個(gè)null。如下圖調(diào)試器里所示:
第14行執(zhí)行的結(jié)果會(huì)打印出orElse里指定的值,此處orElse的思路和上述介紹的ABAP里的DEFAULT關(guān)鍵字是一致的。
這個(gè)Optional工具類的實(shí)現(xiàn)也很簡(jiǎn)易,orElse僅僅是一個(gè)三元表達(dá)式。
要查看更多ABAP和Java,JavaScript的語(yǔ)言特性比較,請(qǐng)關(guān)注Jerry的公眾號(hào):汪子熙。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。