Abap 如何调用SALV表上的remove_列?

Abap 如何调用SALV表上的remove_列?,abap,Abap,我想在cl\u salv\u column\u表的实例上执行方法remove\u column,但由于其可见性级别,我无法执行此操作 计划: 我已经尝试从cl\u salv\u columns\u list继承,然后在remove-方法中执行调用: CLASS lcl_columns_list DEFINITION INHERITING FROM CL_SALV_COLUMNS_LIST. PUBLIC SECTION. METHODS: remove IMPO

我想在
cl\u salv\u column\u表的实例上执行方法
remove\u column
,但由于其可见性级别,我无法执行此操作


计划:

我已经尝试从
cl\u salv\u columns\u list继承,然后在
remove
-方法中执行调用:

CLASS lcl_columns_list DEFINITION INHERITING FROM CL_SALV_COLUMNS_LIST.
    PUBLIC SECTION.
    METHODS:
        remove IMPORTING iw_colname TYPE string.
ENDCLASS.
但很明显,我的铸造知识已经过时了,因为我无法找到合适的解决方案

这是我当前的层次结构-红色箭头显示了我必须采取的方式:

我的方法如下:

DATA lo_column_list TYPE REF TO lcl_columns_list.
lo_column_list ?= CAST cl_salv_columns_list( lo_columns ).
但它在以下方面失败了:


背景:

我的任务是选择3个表的所有列(如
selectt1~*、t2~*、t3~*…
),只要它们的名称不冲突(例如field
MANDT
只显示一次)。这需要定义一个非常大的结构,并将选择列表的大小调整到最大

为了避免这种情况,我想使用内联声明生成的类型。通过
set\u visible(abap\u false)
隐藏各个列仍然会在布局管理器中显示它们,这看起来非常难看


有没有其他方法可以实现我的目标?

使用
set\u technical(abap\u true)
完全隐藏列。至于您的方法——对不起,继承不是这样工作的——我所知道的没有静态类型的面向对象语言。不能将实例化对象“重铸”到其他类。您需要对框架进行大量修改以支持该功能。

为什么要首先调用该方法?@vwegert我还编辑了我的问题。。。如果实现了一种方法,我应该能够使用它。谢谢你的回答!但这个问题的一个主要部分也是调用
remove\u column
——不管我的实际目标是什么。如果能够以某种方式解决这个问题,那就太好了。如果一个方法没有标记为public,那么通常是有原因的。我相信你的假设“如果它存在,我必须能够调用它”是有缺陷的-有很多内部方法没有完全实现,从未完成,未经测试或不受支持,或者需要特殊准备。能见度的概念被发明是有原因的。。。
CX_SY_MOVE_CAST_ERROR
Source type: \CLASS=CL_SALV_COLUMNS_TABLE
Target type: "\PROGRAM=XXX\CLASS=LCL_COLUMNS_LIST"