gpt4 book ai didi

oop - 方法调用作为另一个方法调用的参数?

转载 作者:行者123 更新时间:2023-12-04 21:04:35 25 4
gpt4 key购买 nike

我是 abap (OO) 的新手,但之前是在 Java 中开发的,并编写了一个类 abap“cl_caretaker”,它应该处理对数据库表及其本地副本(实习表)的操作。

我想进行以下方法调用:

caretaker->show_table( caretaker->get_users( ) ) .

和:
 caretaker = cl_caretaker=>get_instance( ). "singleton instance

METHODS:

"! get a list of all user which registrated for FCP
"!
"! @parameter rt_users | users which are registrated for FCP
get_users
RETURNING value(rt_users) TYPE itty_users,


"! shows the content of a table
"!
"! @parameter it_table | the table we want to visualize
show_table
IMPORTING
value(it_table) TYPE ANY TABLE.

如果我将调用分成两部分并将 get_users 的结果存储在 tmp 变量中,则它可以工作。
DATA:
gt_tmp_users TYPE caretaker->itty_users.

gt_tmp_users = caretaker->get_users( ).
caretaker->show_table( gt_tmp_users ).

所以我的问题是:

1) 是这样的电话: caretaker->show_table( caretaker->get_users( ) ). 可能,如果如何?

2) 我还尝试创建一个通用变量,用于存储所有类型的表。
因为我不想为每种表类型创建我使用 tmp/help 变量。
但是我得到的信息是只有(德语:Formalparameter)方法定义的虚拟参数被允许使用泛型类型(例如 TYPE any TABLE )。

这里有一些我已经尝试过的东西:
DATA:
* tmpanytable TYPE TABLE OF any.
* tmpAnyTable TYPE any.
tmpanytable TYPE REF TO data.

" needed to store a temporal table
FIELD-SYMBOLS: <tmpanytable> TYPE ANY TABLE.

* ASSIGN caretaker->get_users( ) TO <tmpAnyTable>.
* <tmpAnyTable> = caretaker->get_users( ).
* caretaker->get_users( ).
*caretaker->show_table( <tmpAnyTable> ).
*caretaker->show_table( caretaker->get_users( ) ).

*CALL METHOD: caretaker->show_table( IMPORTING it_table = caretaker->get_users ).
*CALL METHOD: caretaker->show_table( it_table = caretaker->get_users( ) ).

*COMPUTE caretaker->show_table( it_table = caretaker->get_users( ) ).

*ASSIGN caretaker->get_users() ->* to <tmpAnyTable>.
*Caretaker->show_table( <tmpAnyTable> ).

*call METHOD caretaker->show_table
* Exporting It_table = caretaker->get_users( ).

* CREATE DATA tmpanytable TYPE STANDARD TABLE OF (dbtab)
* WITH NON-UNIQUE DEFAULT KEY.
* ASSIGN tmpanytable->* TO <tmpanytable>.

* CREATE DATA tmpanytable TYPE tabkind OF any Table .
* ASSIGN tmpanytable->* TO <tmpanytable>.

*GET REFERENCE OF caretaker->get_users() INTO tmpAnyTable.
*caretaker->show_table( tmpAnyTable ) .

最佳答案

Method chaining是可能的,并且 methods in operand positions也是可能的,但您至少需要 SAP_ABA 702。

您可以使用泛型类型来传递表,而无需在运行时知道其类型。但是,您不能创建 一个不知道其类型的表。将其与 OO 原则进行比较,您可以处理对抽象父类(super class)的引用并在组件之间传递它们,但您无法实例化抽象父类(super class)。CREATE DATA语句需要一个“具体数据类型”来处理,而不是“抽象父类(super class)型 STANDARD TABLE”。这里的困难部分是决定谁知道类型并创建数据对象。

顺便说一句,你可能想看看内置 Object Services - 也许没有必要再次重新发明数据库访问层轮。

关于oop - 方法调用作为另一个方法调用的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29030923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com