0

我正在尝试执行以下代码。

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

在哪里

originalElement

class Already {}

并且uniqueParent

class Already {
    class Klass {}
}

但是,当我尝试用 替换originalElementuniqueParent,它不起作用。我已经尝试使用其他元素替换 API,例如CtMethod它在那里工作。我想知道这是预期的行为CtClass还是应该是错误?

4

1 回答 1

1

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

当您replace在 a 上使用时CtMethod,您可能会使用诸如 a 之类的父元素CtClass而不是它CtMethod本身来检查更改。同样,您可以使用originalElement.getParent()after replacement 来获取当前模型的一部分以检查更改。在这种情况下,它将返回 a CtPackage,它的 type 元素由uniqueParent而不是引用originalElement

于 2021-03-14T16:08:02.990 回答