2012-01-31 2 views
0

Имеет ли checkstyle правило, проверяющее, перекрывает ли подкласс публичное или защищенное поле родительского класса.проверить, переопределено ли поле

Например

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

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

Я хочу, чтобы как-то с Checkstyle запретить такую ​​ситуацию.

+0

Вы не можете переопределить поля в Java. В вашем примере 'Ancestor.VALUE' отличается от' Descendant.VALUE'. Один не переопределяет другой. Любые ссылки на них определяются во время компиляции. –

+0

@SteveKuo, вот почему я хочу его запретить. Можно случайно создать такое поле, и это может привести к ошибкам. –

ответ

2

Символы переопределения не применимы для статических полей. Когда вы получаете доступ к VALUE в Descendant, тогда в качестве значения используется 100. Вы также можете ссылаться на VALUE суперкласса, используя Ancestor.VALUE.

Теперь лучший способ избежать путаницы - всегда получать доступ к статическим членам, присвоив его классу, например, Ancestor.VALUE и Descendant.VALUE. IDE (например, eclipse) позволяют вам применять это правило, но не видели этого в каких-либо инструментах анализа статического кода. Ниже приведен скриншот о том, как применять это в затмении

enter image description here

Смежные вопросы