写点什么

ABAP 和 Java 里关于 DEFAULT(默认) 机制的一些语言特性

用户头像
Jerry Wang
关注
发布于: 2021 年 05 月 23 日
ABAP和Java里关于DEFAULT(默认)机制的一些语言特性

ABAP 740 的新语法:



上图的代码相当于:


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.



针对这种情况,ABAP 也有对应的解决方案。


下图的第 17 行会抛出异常,而 19 行不会,从语义上容易理解:如果内表 lt_data 里不存在 name 为 Spring2 的记录,则返回开发者使用 DEFAULT 关键字指定的一个结构作为默认值。



在 Java 8 也有类似机制。为了避免臭名昭著的 NullPointerException,Java 开发人员在使用对象的实例方法之前,需要检查对象实例是否不为 null:


if( xx != null ){    xx.doSomething();}
复制代码


在 Java 8 里,在包 java.util 里提供了一个新的工具类 Optional,看看它的用法。


第 11 行的 filter 方法,语义上应该返回一个 null,因为我在第 10 行初始化的字符串常量的长度显然大于 6. 但是调用这个 filter 方法的对象是一个 Optional 对象,所以最终 filter 方法最终也返回一个 Optional 对象,这个对象包裹了一个 null。如下图调试器里所示:



第 14 行执行的结果会打印出 orElse 里指定的值,此处 orElse 的思路和上述介绍的 ABAP 里的 DEFAULT 关键字是一致的。



这个 Optional 工具类的实现也很简易,orElse 仅仅是一个三元表达式。




要查看更多 ABAP 和 Java,JavaScript 的语言特性比较,请关注 Jerry 的公众号:汪子熙。




发布于: 2021 年 05 月 23 日阅读数: 6
用户头像

Jerry Wang

关注

个人微信公众号:汪子熙 2017.12.03 加入

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使。

评论

发布
暂无评论
ABAP和Java里关于DEFAULT(默认)机制的一些语言特性