Oop abap方法调用作为方法调用中的参数

Oop abap方法调用作为方法调用中的参数,oop,methods,parameters,abap,Oop,Methods,Parameters,Abap,我是abap(OO)的新手,但之前是用java开发的,并编写了一个类abap“cl_Carether”,它应该处理对数据库表及其本地副本(intern表)的操作 我要进行以下方法调用: caretaker->show_table( caretaker->get_users( ) ) . 与: 如果我将调用一分为二,并将get_users的结果存储在一个tmp变量中,它就会工作 DATA: gt_tmp_users TYPE caretaker->itty_users.

我是abap(OO)的新手,但之前是用java开发的,并编写了一个类abap“cl_Carether”,它应该处理对数据库表及其本地副本(intern表)的操作

我要进行以下方法调用:

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

如果我将调用一分为二,并将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\u table(caretaker->get\u users())的调用。
可能,如果可能,如何

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

这里有一些我已经尝试过的东西:

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 ) .
数据:
*tmpanytable任何类型的表格。
*TMPANY表格类型任意。
tmpanytable类型引用到数据。
“需要存储一个时态表
字段符号:键入任何表格。
*将管理员->获取用户()分配给。
*=管理员->获取用户()。
*管理员->获取用户()。
*管理员->显示表格()。
*管理员->显示\u表(管理员->获取\u用户())。
*调用方法:管理员->显示\u表(导入它\u表=管理员->获取\u用户)。
*调用方法:管理员->显示\u表(it\u表=管理员->获取用户())。
*COMPUTE-caretaker->show\u table(it\u table=caretaker->get\u users())。
*将管理员->获取用户()->*分配给。
*管理员->显示表格()。
*调用方法管理员->显示表格
*导出It\u table=管理员->获取用户()。
*创建数据表类型标准表(dbtab)
*使用非唯一的默认密钥。
*将TMPANY表格->*分配给。
*创建数据TMPANY Table TYPE tabkind(表格类型)任何表格。
*将TMPANY表格->*分配给。
*获取管理员的引用->将用户()获取到TMPANY表中。
*管理员->显示表格(TMPANY表格)。
是可能的,也是可能的,但您至少需要SAP_ABA 702

您可以使用泛型类型在运行时传递表而不知道其类型。但是,您不能在不知道其类型的情况下创建表。与OO原则相比,您可以处理对抽象超类的引用并在组件之间传递它们,但您不能实例化抽象超类。
CREATE DATA
语句需要一个“具体的数据类型”来处理,而不是“抽象超级类型
标准表”
。这里最难的部分是决定谁知道类型并创建数据对象


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

你使用的是什么SAP_ABA版本?软件组件:SAP_ABA版本:701级别:0004最高支持包:SAPKA70104谢谢你的回答和提示。-方法链接示例“寻找我喜欢的生成器设计模式,但这不是用于嵌套我要求的方法。-但我将更仔细地看一看“对象服务”。德语维基百科中的方法或表达式链接信息
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 ) .