ABAP和Java里关于DEFAULT(默认)机制的一些语言特性
2018-03-15 00:00
323 查看
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的公众号:汪子熙。
上图的代码相当于:
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的公众号:汪子熙。
相关文章推荐
- ABAP和Java里关于DEFAULT(默认)机制的一些语言特性
- 关于使用java语言操作FTP的一些问题
- (转)关于java内省机制的一些描述与说明
- JavaSE_8系列博客——Java语言的特性(五)--接口和继承(6)--默认方法的使用场景
- javaSE_8系列博客——Java语言的特性(一)--关于面向对象基本概念的理解(1)
- 关于JAVA语言IO流的一些理解
- 关于java线程的一些特性 启动 中断 及如何退出
- Java8新特性之默认方法(default)浅析
- 关于java语言数组的一些简单用法
- C++与Java在一些语言特性上的异同
- Java1.8新的语言特性——默认方法(Default Methods)
- java的语言特性,跨平台原理和两种核心机制(个人总结)
- 关于Java语言中如何运用反射机制执行某个确定类的构造方法(一)
- Java中的类装载机制、反射机制、JDK5.0版本新加入一些特性
- javaSE_8系列博客——Java语言的特性(一)--关于面向对象基本概念的理解(2)--对象
- Java8新特性--Interface中的default方法(接口默认方法)
- Java的一些高级特性(三)——关于反射
- 关于java类装载机制一些总结
- 【java新特性】关于可变参数的一些总结
- 关于Java的事件分派机制及两个可能的语言扩展