微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

API 函数`replace` 不会用 CtClass 实例替换一个类

如何解决API 函数`replace` 不会用 CtClass 实例替换一个类

我正在尝试执行以下代码

    col
6   4.0
7   5.0
8   6.0

哪里

System.out.println(originalElement); System.out.println(uniqueParent); ((CtClass) originalElement).replace((CtClass) uniqueParent);

originalElement

class Already {}

uniqueParent

但是,当我尝试用 class Already { class Klass {} } 替换 originalElement 时,它不起作用。我已经尝试使用其他元素(例如 uniqueParent)替换 API,并且它在那里工作。我想知道这是 CtMethod 的预期行为还是应该是一个错误

解决方法

总结一下 Spoon forum 上对此的讨论,这里的问题涉及 CtElement.replace 的语义。意思不是调用目标采用与其参数相同的状态。这意味着过去将调用的目标对象包含为节点的 AST 模型现在包含参数对象作为替代。

当您在 replace 上使用 CtMethod 时,您可能使用父元素(例如 CtClass 而不是 CtMethod 本身)检查了更改。同样,您可以在替换后使用 originalElement.getParent() 获取当前模型的一部分以检查更改。在这种情况下,它将返回一个 CtPackage,它具有由 uniqueParent 而不是 originalElement 引用的类型元素。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。