2016-04-22 74 views
1
的对象

假设我有一个名为Foo的类的外部库。我不能将Foo更改为私有构造函数,但我有一个我写的FooFactory类。checkstyle - 禁止初始化类型为

所以我有FooFactory.getAFoo()但我想checkstyle在我的代码的其余部分捕获任何new Foo()强制使用工厂。

我有这样的:

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

,但这似乎并没有检测new Foo()

我可以使用正则表达式,但是这样会更干净。

我也有类似的问题,防止扩展一个类:

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

这些都不CheckStyle的模块似乎做任何事情。

我在做什么错?

回答

1

IllegalTokenText检查令牌本身上的非法文本,而不是后续的IDENT令牌等。所以这就是为什么它在你的情况下似乎什么也不做的原因。

对于您的情况,您可能需要尝试使用SevNTU Checkstyle扩展名,该扩展名提供了一个名为ForbidInstantiation的检查,可以解决您的问题。他们没有我知道的文档,所以我将源代码与Javadoc链接起来。当您使用SevNTU Checkstyle时,请务必使用常规Checkstyle和SevNTU Checkstyle的正确版本,因为并非所有组合都兼容(overview)。

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