点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
(重要:我将其发布为问题,但我已经找到了解决方案,所以我也将其发布)
我在这里有一个错误(此代码是从ABAP文档中的接口,但我更改了接口的顺序):
接口intf1。 方法meth1。 结束界面。 接口intf2。 接口intf1。 方法meth2。 结束界面。 类别cls定义摘要。 公共部分。 接口intf2抽象方法meth2。 接口intf1抽象方法meth1。 " <===此处出现语法错误 ENDCLASS。
我收到此语法错误:
在先前的INTERFACES语句中,方法" METH1"被声明为非抽象
为什么? 有什么解决方案?
(请注意,在2011年也提出了相同的问题,并由 Suhas Saha ;您可能更喜欢他的答案,从技术上来讲,这还是一样的,但是我添加了有关ABAP 7.52的注释)
关于语法错误:实际上,以下语句使meth2抽象化,但也使其他方法具体化,尤其是intf1〜meth1
所以下一条语句
与上一个将intf1〜meth1具体化的矛盾。
这就是语法错误的原因。
解决方案:要使程序编译,请切换两个INTERFACES语句:
这里引人注目的是这样的陈述
"保留intf〜meth1摘要"。 因此,根据先前的INTERFACES语句,如果已经在先前的INTERFACES语句中明确定义了抽象,则不会一直使intf1〜meth1变得具体。
---------------------------
新功能:请注意,从ABAP 7.52中可以避免此问题因为现在可以在INTERFACES内部使用〜(波浪号),所以您只能定义一个INTERFACES语句,如下所示(摘录自界面-抽象方法):
完整代码:
欢呼
有趣,感谢您的发帖。 但是,如果这是一个已回答的问题,那应该不是博客吗?
有意思的是,如果您在类中省略了INTF1的声明,会发生什么情况?
两行符合"简单答案"的条件,我想您会以 小小的位子:-)
这项工作会在7.2之前完成吗? (目前没有要测试的系统):
也许,也许不是。 这只是一个简单的问题,一个简单的答案。 如果我们在该类中省略INTERFACES intf1,则intf1中的方法将是具体的,但是问题就不相关了,这里的目标是从2个接口中获得抽象方法。
不仅仅是纯粹的知识分子。 将其声明为抽象的原因是阻止人们使用模板方法,并迫使子类实现者重新定义它们。 如果您不重新定义它或从超类调用它,它将转储。
它在7.51中有效。 就我而言,我不想直接公开intf1中的方法(我的类有很多方法,并且不给那些接口方法起别名的作用是让它们"隐藏在接口后面"),但是您的回答是有道理的,也值得作为解决方案 (我重新打开我的问题,以便您可以发布)。 谢谢。
一周热门 更多>