ABAP 和 Java 里关于 DEFAULT(默认) 机制的一些语言特性
ABAP 740 的新语法:
上图的代码相当于:
由此可见新语法比较简洁,能少写 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:
在 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 的公众号:汪子熙。
版权声明: 本文为 InfoQ 作者【Jerry Wang】的原创文章。
原文链接:【http://xie.infoq.cn/article/3ba20fb704ca0ce699979dd8b】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论