Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Checkstyle类检查_Java_Types_Equals_Checkstyle - Fatal编程技术网

Java Checkstyle类检查

Java Checkstyle类检查,java,types,equals,checkstyle,Java,Types,Equals,Checkstyle,我想使用Checkstyle编写一个检查,确定给定类是否扩展了其他类,以及是否有“==”的用法。有人能帮我理解我需要做什么吗 以下是我目前掌握的情况: import com.puppycrawl.tools.checkstyle.api.Check; import com.puppycrawl.tools.checkstyle.api.DetailAST; import com.puppycrawl.tools.checkstyle.api.TokenTypes; public final c

我想使用Checkstyle编写一个检查,确定给定类是否扩展了其他类,以及是否有“==”的用法。有人能帮我理解我需要做什么吗

以下是我目前掌握的情况:

import com.puppycrawl.tools.checkstyle.api.Check;
import com.puppycrawl.tools.checkstyle.api.DetailAST;
import com.puppycrawl.tools.checkstyle.api.TokenTypes;

public final class MyEqualsCheck
        extends Check {

    @Override
    public int[] getDefaultTokens() {
        return new int[] { TokenTypes.EQUAL, TokenTypes.NOT_EQUAL };
    }

    /**
     * Right before we visit the AST, we're allowed to do initialization and setup 
     * here.
     */
    @Override
    public void beginTree(final DetailAST aRootAST) {
    }

    /**
     * Each token that we defined above is visited here.
     */
    @Override
    public void visitToken(final DetailAST ast) {

        final DetailAST lValue = ast.getFirstChild();
        final DetailAST rValue = lValue.getNextSibling();
        //is it possible to determine if lValue and rValue implement a given interface directly or indirectly?
    }

    private DetailAST getLowestParent(final DetailAST aAST) {
        DetailAST lowestParent = aAST;
        while ((lowestParent.getParent() != null)) {
            lowestParent = lowestParent.getParent();
        }
        return lowestParent;
    }

}

这看起来是个不错的开始。对于==,请查看类,该类检查==在两个字符串文本之间的用法

为了便于检查,您需要验证您的类没有使用a==。这意味着您的visitToken将只记录您是否扩展了另一个类以及是否使用==。 然后,使用finishTree实际引发错误


有关详细示例,请参见,它检查一个类,以查看您是否同时实现了equals()和hashCode()。请注意,它使用映射正确管理同一文件中的多个类。

Hi Matt-感谢您的回复。您能否发布一段代码,说明我如何发现类是否在其祖先中的任何地方实现了接口?