扩展ABAP中重写方法的接口

Extend interface of overridden method in ABAP

众所周知,在继承的ABAP class中,不能扩展或重新定义被覆盖方法的接口。 Help:

The interface and the category of the method (a general or functional instance method or event handler) are not changed in a redefinition.

这涵盖全局和局部classes 重新定义。

如果要添加或删除方法参数或更改其类型,此限制的可能解决方法是什么?可选参数是一种方式,虽然不是很舒服。还有其他方法吗?

您可以创建自己的界面,扩展现有界面。添加具有不同参数的相同方法。然后从您的扩展接口创建抽象 class 并使用代码填充方法以调用实际方法并将值设置为可选参数。然后从 abstract.

创建你的 class
interface
|--> extented interface
     |--> abstract class
          |--> class

您不能以任何方式在其实现中更改接口方法的签名。这仅仅是因为没有办法在 运行 时间不产生难以分析的语法错误。一个接口是一个契约——任何实现它的 class 都承诺它将实现接口中存在的所有方法(和变量...)。

假设接口 IF1 有一个方法 METH 接受类型 TYPE1 的单个参数 PAR1。如果您现在编写一个 class 来实现方法 METH,并使用类型为 TYPE2 的单个参数 PAR1,那么您 不是 编写了实现 IF1 的 class。将类型 TYPE1 的参数传递给 class 的方法的调用者将遇到类型转换错误(无论是在 运行 时还是在编译时,在某种程度上取决于类型的通用性).

因此,无法在不产生此类 运行time 错误的情况下更改其重新定义中的接口方法的签名 - 您的 class not 实现接口。实现接口意味着 class 将完全接受为接口中的方法指定的参数的数量、类型和种类。从字面上看,没有任何用例可以让您有意义地想要更改它,同时仍然声称您的 class 实现了该接口。无论您想做什么,这都不是解决方案。