ABAP 740的新语法:java
上图的代码至关于:工具
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.
因而可知新语法比较简洁,能少写3行代码。可是这样有一个缺陷,在新语法下若是it_data内表内不存在object_ext的值为cl_crm_prodil_bo_names=>gc_prod_root的记录,就会终止程序执行,抛出异常CX_SY_ITAB_LINE_NOT_FOUND.3d
针对这种状况,ABAP也有对应的解决方案。调试
下图的第17行会抛出异常,而19行不会,从语义上容易理解:若是内表lt_data里不存在name为Spring2的记录,则返回开发者使用DEFAULT关键字指定的一个结构做为默认值。code
在Java 8也有相似机制。为了不臭名昭著的NullPointerException,Java开发人员在使用对象的实例方法以前,须要检查对象实例是否不为null:对象
if( xx != null ){ xx.doSomething(); }
在Java 8里,在包java.util里提供了一个新的工具类Optional,看看它的用法。blog
第11行的filter方法,语义上应该返回一个null,由于我在第10行初始化的字符串常量的长度显然大于6. 可是调用这个filter方法的对象是一个Optional对象,因此最终filter方法最终也返回一个Optional对象,这个对象包裹了一个null。以下图调试器里所示: ip
第14行执行的结果会打印出orElse里指定的值,此处orElse的思路和上述介绍的ABAP里的DEFAULT关键字是一致的。开发
这个Optional工具类的实现也很简易,orElse仅仅是一个三元表达式。字符串
要查看更多ABAP和Java,JavaScript的语言特性比较,请关注Jerry的公众号:汪子熙。