扩展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 实现了该接口。无论您想做什么,这都不是解决方案。
众所周知,在继承的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.
创建你的 classinterface
|--> extented interface
|--> abstract class
|--> class
您不能以任何方式在其实现中更改接口方法的签名。这仅仅是因为没有办法在 运行 时间不产生难以分析的语法错误。一个接口是一个契约——任何实现它的 class 都承诺它将实现接口中存在的所有方法(和变量...)。
假设接口 IF1
有一个方法 METH
接受类型 TYPE1
的单个参数 PAR1
。如果您现在编写一个 class 来实现方法 METH
,并使用类型为 TYPE2
的单个参数 PAR1
,那么您 不是 编写了实现 IF1
的 class。将类型 TYPE1
的参数传递给 class 的方法的调用者将遇到类型转换错误(无论是在 运行 时还是在编译时,在某种程度上取决于类型的通用性).
因此,无法在不产生此类 运行time 错误的情况下更改其重新定义中的接口方法的签名 - 您的 class not 实现接口。实现接口意味着 class 将完全接受为接口中的方法指定的参数的数量、类型和种类。从字面上看,没有任何用例可以让您有意义地想要更改它,同时仍然声称您的 class 实现了该接口。无论您想做什么,这都不是解决方案。