2016-04-22 10 views
1

のオブジェクトの初期化を禁止します。Fooというクラスの外部ライブラリがあるとします。私はFooにプライベートコンストラクタを変更することはできませんが、私が書いたFooFactoryクラスがあります。checkstyle - タイプ

だから、私はFooFactory.getAFoo()を持っていますが、チェック・スタイルは、コードの残りの部分では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になります。