2016-04-22 72 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