代码之家  ›  专栏  ›  技术社区  ›  user3534080

checkstyle-禁止初始化类型的对象

  •  1
  • user3534080  · 技术社区  · 10 年前

    假设我有一个名为Foo的类的外部库。我不能将Foo更改为具有私有构造函数,但我有一个我编写的FooFactory类。

    所以我有 FooFactory.getAFoo() 但我想要checkstyle来捕捉任何 new Foo() 在剩下的代码中,强制使用工厂。

    我有这个:

    <module name="IllegalTokenText">
        <property name="tokens" value="LITERAL_NEW"/>
        <property name="format" value="Foo"/>
    </module>
    

    但这似乎没有检测到 新建Foo() .

    我可以使用正则表达式,但这要干净得多。

    我在阻止扩展类时遇到了类似的问题:

    <module name="IllegalTokenText">
        <property name="tokens" value="EXTENDS_CLAUSE"/>
        <property name="format" value="AndroidTestCase"/>
    </module>
    

    这些checkstyle模块似乎都没有任何作用。

    我做错了什么?

    1 回复  |  直到 10 年前
        1
  •  1
  •   barfuin PKV    10 年前

    IllegalTokenText 检查令牌本身上的非法文本,而不是随后的IDENT令牌或类似的令牌。所以这就是为什么它似乎对你的案子毫无作用。

    在您的情况下,您可能希望尝试使用 SevNTU Checkstyle 扩展,它提供一个名为 ForbidInstantiation 这可能会解决你的问题。他们没有我知道的文档,所以我将源代码与Javadoc链接起来。使用SevNTU Checkstyle时,请确保使用常规Checkstyle和SevNTU-Checkstyle的正确版本,因为并非所有组合都兼容( overview ).

    如果这没有帮助,你将不得不 roll your own .