首页 > 解决方案 > 使用 CheckStyle 阻止对内部接口/类的公共访问

问题描述

有没有办法更新 checkstyle 设置以只允许封装私有内部接口或类?例如


public class A {
 ...
 public interface B { // should flag it as error
  ..
 }
}

public class A {
 ...
 interface B { // valid syntax
  ..
 }
}

标签: javacheckstyle

解决方案


您可以为此使用MatchXPath


<?xml version="1.0"?>
<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
        "http://checkstyle.sourceforge.net/dtds/configuration_1_3.dtd">

<module name="Checker">
    <property name="charset" value="UTF-8"/>
    <property name="haltOnException" value="true"/>
    <property name="severity" value="error"/>

    <module name="TreeWalker">
        <module name="MatchXpath">
            <property name="query" value="/CLASS_DEF/OBJBLOCK/(CLASS_DEF | INTERFACE_DEF)/MODIFIERS[(*)]"/>
            <message key="matchxpath.match"
                     value="Only package private inner interfaces or classes are allowed."/>
        </module>
    </module>
</module>



public class A {

    public interface B { // violation

    }

    public class C { // violation

    }

    public enum D { // ok, enum not specified in config

    }

    class E { // ok, no modifier

    }

    interface F { ok, no modifier

    }

    private class G { // violation

    }

    private interface H { // violation

    }
}



➜  src java -jar checkstyle-8.41-all.jar -c config.xml A.java
Starting audit...
[ERROR] A.java:3:5: Only package private inner interfaces or classes are allowed. [MatchXpath]
[ERROR] A.java:7:5: Only package private inner interfaces or classes are allowed. [MatchXpath]
[ERROR] A.java:23:5: Only package private inner interfaces or classes are allowed. [MatchXpath]
[ERROR] A.java:27:5: Only package private inner interfaces or classes are allowed. [MatchXpath]
Audit done.
Checkstyle ends with 4 errors.



推荐阅读