ABAP和Java里关于DEFAULT(默认)机制的一些语言特性
2023-09-14 09:02:50 时间
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的公众号:汪子熙。
相关文章
- java卸载dll,如何在java中卸载Dll?[通俗易懂]
- java中打印数组的方法_Java数组方法–如何在Java中打印数组
- java语言的特点_Java语言有什么特点?
- IntelliJ IDEA 2022 for Mac(最好用的Java开发工具)v2022.2.1汉化激活版
- 中级java笔试题_Java中级面试题合集[通俗易懂]
- java输出值取后两位小数,Java输出结果保留两位小数
- java语言的平台无关性是指什么,《深入Java虚拟机》学习笔记二:平台无关性
- 什么是java虚拟机(Java Virtual Machine)?
- java与python-如何对比Python和Java,只需三分钟告诉你!
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- java resourcebundle_Java – Properties和ResourceBundle类学习「建议收藏」
- java生成license_使用truelicense实现用于JAVA工程license机制(包括license生成和验证)…
- JavaSE:第一章:java语言概述
- java list 转json 字符串_JSON的String字符串与Java的List列表对象的相互转换
- 将数组转换成集合_java数组转换成集合
- Java 依赖注入(DI)
- 字符串 java字符串编码转换处理类详解编程语言
- JAVA基础之File类详解编程语言
- java 生产者和消费者——ReentrantLock方式详解编程语言
- Oracle与Java的连接:揭秘数据库开发技术之间的神奇联系(oracle连接java)
- 策略Java处理Redis过期策略的实践(redisjava过期)
- 时间Java程序如何设置Redis过期时间(redisjava过期)
- 2021 年学习 Java 的三个理由
- Java轻松处理Redis缓存(java处理redis)
- MSSQL与Java的数据库连接实践(mssql连接java)
- 秘籍学习实现纯Java版Redis(纯java版redis)
- 缓存使用Redis让Java代码更加迅速缓存设置(redis设置java)
- java正则表达式提取数字的方法实例