日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

SAP ABAP里存在Java List这种集合工具类么?CL_OBJECT_COLLECTION了解一下

發布時間:2023/12/19 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SAP ABAP里存在Java List这种集合工具类么?CL_OBJECT_COLLECTION了解一下 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Jerry以前在工作中交替做著ABAP和Java開發時,總是在使用一種語言時,懷念另一種語言的便利之處,比如用ABAP開發時,懷念Java里以List為代表的功能強大,使用方便的集合工具類。

List或許是眾多Java初學者最先接觸和掌握的Java集合工具接口之一。以最具代表性的實現類ArrayList為例,查看其源代碼,發現ArrayList不過就是用面向對象的編程方式封裝了對一個對象數組的常用操作,使其不僅支持Java原生Array的所有功能,同時也支持前者不具備的動態擴容功能。

對Java稍有了解的開發者,要自己仿照著寫出一個同樣的ArrayList實現,并不是一件困難的事情。不過List接口和其眾多實現類都是Java開發包的一部分,這使得Java開發者做應用開發時不用重復造輪子,可以直接使用,非常方便。

那么SAP ABAP里存在類似的集合工具類么?

首先我們有內表,具備Java Array的所有功能,并且功能和使用靈活度上來說都遠勝后者。但內表的操作畢竟是一種面向過程的編程思路。ABAP里存在類似Java List的接口嗎?

通過之前查看Java ArrayList的實現源代碼,我們可以仿照其思路,在ABAP里實現一個一模一樣的ABAP ArrayList出來,只需要定義一個行類型(Table Line)為對象引用的內表變量,再用面向對象編程方式實現對這個內表變量插入,刪除,和按索引訪問的功能即可。而Java ArrayList的動態擴容,ABAP內表原生就支持。

事實上SAP CRM就采取了這種實現思路,CL_CRM_BOL_ENTITY_COL,這個工具類,從名稱上就能判斷出它是BOL實例的存儲容器,提供了容器內BOL實例元素的插入,刪除和遍歷的功能。

然而這個列表只能插入類型為BOL實例的元素,有更通用的ABAP List工具類么?那就是CL_OBJECT_COLLECTION, 提供了類似Java ArrayList對列表元素的基本操作:

  • 插入
  • 刪除
  • 按索引訪問
  • 遍歷
  • 清空列表

這個工具類內部維護的內表類型為TYPE STANDARD TABLE OF REF TO OBJECT, 因此可插入指向任何對象實例的引用。

Jerry這篇博客曾經介紹過該工具類的一個使用例子:

CL_OBJECT_COLLECTION, iterator and Polymorphism

假設我們要開發一個計算圖形面積的應用,支持圓形和長方形。實現兩個類ZCL_CIRCLE和ZCL_RECTANGLE, 分別按照圓形和長方形的面積計算公式,實現GET_AREA方法。


傳統的實現方式

定義一個Table Line類型為通用的對象引用(TYPE REF TO OBJECT)的內表lt_shape,用于存放圓形和長方形的實例對象引用。

每次創建圓形或者長方形的對象實例之后,添加到內表中,然后LOOP內表,逐行取出元素,用IS INSTANCE OF關鍵字,判斷當前記錄指向的是圓形還是長方形實例,再用CAST進行強制類型轉換,調用對應的面積計算方法。

這種實現方式,在LOOP里有IF ELSE判斷,IS INSTANCE OF和CAST這三種非常丑陋的寫法。將來如果要支持其他圖形比如三角形的面積計算,又得在LOOP里添加新的ELSE分支,這違反了程序設計的開閉原則-對擴展開放,對修改封閉。

采用CL_OBJECT_COLLECTION的多態實現

定義一個新的接口ZIF_SHAPE,圓形和長方形的類均實現自這個接口:


借助CL_OBJECT_COLLECTION, 采取面向對象編程里多態(Polymorphism)的思路,我們不僅避免了丑陋的IF-ELSE,繁瑣的類型探測IS INSTANCEOF和強制類型轉換CAST,同時將代碼行數從37行減少到了20行。將來要是得增加對其他圖形的支持,只需要新建圖形類并實現,而無需修改下面的計算邏輯。

當然這個例子如果不用CL_OBJECT_COLLECTION, 而是每次把實現了ZIF_SHAPE接口的圖形類實例,加入到TABLE LINE類型為TYPE REF TO OBJECT的內表里,然后直接LOOP內表,也可以達到同樣的效果。本文只是為了演示CL_OBJECT_COLLECTION的用法,故而沒有使用內表來完成計算。

感謝閱讀。

要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":

總結

以上是生活随笔為你收集整理的SAP ABAP里存在Java List这种集合工具类么?CL_OBJECT_COLLECTION了解一下的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。