checkstyle - 禁止初始化类型的对象
checkstyle - prohibit initializing object of type
假设我有一个带有名为 Foo 的 class 的外部库。我无法将 Foo 更改为具有私有构造函数,但我有一个我编写的 FooFactory class。
所以我有 FooFactory.getAFoo()
但我希望 checkstyle 捕获我其余代码中的任何 new Foo()
,以强制使用工厂。
我有这个:
<module name="IllegalTokenText">
<property name="tokens" value="LITERAL_NEW"/>
<property name="format" value="Foo"/>
</module>
但这似乎没有检测到 new Foo()
。
我可以使用正则表达式,但这更简洁。
我在阻止扩展 class:
时遇到了类似的问题
<module name="IllegalTokenText">
<property name="tokens" value="EXTENDS_CLAUSE"/>
<property name="format" value="AndroidTestCase"/>
</module>
这些 checkstyle 模块似乎都没有做任何事情。
我做错了什么?
IllegalTokenText 检查令牌本身的非法文本,而不是后续 IDENT 令牌或其他类似令牌。所以这就是为什么它在你的情况下似乎什么都不做。
对于您的情况,您可能想尝试使用 SevNTU Checkstyle extension, which offers a check called ForbidInstantiation which might solve your problem. They have no documentation that I am aware of, so I am linking the source code with Javadoc. When you use SevNTU Checkstyle, be sure to use the right versions of regular Checkstyle and SevNTU Checkstyle, because not all combinations are compatible (overview)。
如果这没有帮助,您将不得不 roll your own。
假设我有一个带有名为 Foo 的 class 的外部库。我无法将 Foo 更改为具有私有构造函数,但我有一个我编写的 FooFactory class。
所以我有 FooFactory.getAFoo()
但我希望 checkstyle 捕获我其余代码中的任何 new Foo()
,以强制使用工厂。
我有这个:
<module name="IllegalTokenText">
<property name="tokens" value="LITERAL_NEW"/>
<property name="format" value="Foo"/>
</module>
但这似乎没有检测到 new Foo()
。
我可以使用正则表达式,但这更简洁。
我在阻止扩展 class:
时遇到了类似的问题<module name="IllegalTokenText">
<property name="tokens" value="EXTENDS_CLAUSE"/>
<property name="format" value="AndroidTestCase"/>
</module>
这些 checkstyle 模块似乎都没有做任何事情。
我做错了什么?
IllegalTokenText 检查令牌本身的非法文本,而不是后续 IDENT 令牌或其他类似令牌。所以这就是为什么它在你的情况下似乎什么都不做。
对于您的情况,您可能想尝试使用 SevNTU Checkstyle extension, which offers a check called ForbidInstantiation which might solve your problem. They have no documentation that I am aware of, so I am linking the source code with Javadoc. When you use SevNTU Checkstyle, be sure to use the right versions of regular Checkstyle and SevNTU Checkstyle, because not all combinations are compatible (overview)。
如果这没有帮助,您将不得不 roll your own。