2012-01-31 14 views
0

checkstyleには、サブクラスが親クラスのpublicフィールドまたはprotectedフィールドをオーバーライドするかどうかをチェックするルールがあります。フィールドがオーバーライドされているかどうかをチェック

は例

class Ancestor { 
    public static final int VALUE = 123; 
} 

class Descendant extends Ancestor { 
    public static final int VALUE = 100; // <-- this is unwanted 
} 

のために私はこのような状況を禁止するのCheckstyleを何とかしたいです。

+0

でこれを強制する方法についてのスクリーンショットです。あなたの例では 'Ancestor.VALUE'は' Descendant.VALUE'とは異なります。一方は他方を無効にしません。それらの参照はコンパイル時に決定されます。 –

+0

@SteveKuo、それは私がそれを禁止したい理由です。誤ってこのようなフィールドを作成すると、エラーが発生する可能性があります。 –

答えて

2

オーバーライドセマンティクスは、スタティックフィールドには適用されません。 VALUEに​​でアクセスすると、値として100が使用されます。 Ancestor.VALUEを使用して、スーパークラスのVALUEを参照することもできます。

ここで、混乱を避ける最も良い方法は、静的メンバーには、Ancestor.VALUEDescendant.VALUEのようなクラス名で修飾して常にアクセスすることです。 IDE(Eclipseのような)はこのルールを強制することができますが、静的コード分析ツールではこれを見ませんでした。以下は、Javaでのフィールドを上書きすることはできません日食

enter image description here

関連する問題