无法用eclipse JDT中的extends替换工具

时间:2016-06-09 07:41:38

标签: eclipse eclipse-jdt

我目前正在处理的错误要求我在选择相关的快速修复程序时用扩展替换工具。

例如:

public class R{

}
class Q implements R{ //error here 

}

快速解决方法是将工具改为扩展(这就是我所关注的)。但要做到这一点,我需要TypeDeclaration.SUPERCLASS_TYPE作为ChildListPropertyDiscriptor,而现在它是ChildPropertyDiscriptor。这使得它无法作为参数提供给getListRewrite

我想知道我是否可以将TypeDeclaration.SUPERCLASS_TYPE作为ChildListPropertyDiscriptor。或者其他一些方法可以做到这一点。

我的完整代码段如下:

TypeDeclaration typeDecl= (TypeDeclaration) selectedNode.getParent();
    {
        ASTRewrite rewrite= ASTRewrite.create(root.getAST());
        ASTNode placeHolder= rewrite.createMoveTarget(selectedNode);
        ListRewrite interfaces= rewrite.getListRewrite(typeDecl, TypeDeclaration.SUPERCLASS_TYPE_PROPERTY);   //problem here
        interfaces.insertFirst(placeHolder, null);

        String label= CorrectionMessages.LocalCorrectionsSubProcessor_implementstoextends_description;
        Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
        ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(), rewrite, IProposalRelevance.CHANGE_EXTENDS_TO_IMPLEMENTS, image);
        proposals.add(proposal);
    }

1 个答案:

答案 0 :(得分:0)

Java不支持多继承,因此只支持extends的一种类型。这解释了为什么TypeDeclaration.SUPERCLASS_TYPE没有列表,因此没有ChildListPropertyDescriptior(可能与ListRewrite一起使用)。

您想要的是ASTRewrite.set()

rewrite.set(typeDecl, TypeDeclaration.SUPERCLASS_TYPE_PROPERTY, placeHolder, null);