2011-04-25 5 views
26

estoy usando Checkstyle y estoy recibiendo un error acerca de este método:¿Se ha emitido incorrectamente el error "Método no diseñado para la extensión" de Checkstyle?

public final String getAdmitCodeStatus() { 
    return admitCodeStatus; 
} 

Aquí está el error que consigo:

Método 'getAdmitCodeStatus' no está diseñado para la extensión - tiene que ser abstracta, final, o vacío.

¿Cómo es que este método no cumple? ¿Hay algo que estoy haciendo mal que Checkstyle me ladre sobre este método?

+0

¿Tiene otra instancia de 'getAdmitCodeStatus' que violaría esa regla? Por ejemplo, ¿hay una clase base que implemente ese método con un cuerpo no vacío? –

+0

¿Puedes hacer que la clase sea definitiva para ver si se va (si tu clase puede ser definitiva)? – CoolBeans

+0

@Chris: Buena idea, pero yo no. Acabo de hacer una búsqueda para asegurarme y no tengo otros métodos que compartan este nombre. – McGlone

Respuesta

26

Parece ser causado por la regla DesignForExtension. De acuerdo con the documentation:

Comprueba que las clases están diseñadas para la extensión. Más específicamente, impone un estilo de programación donde las superclases proporcionan "ganchos" vacíos que pueden implementarse por subclases.

La regla exacta es que los métodos no estáticos, no privados de clases que puede tener subclases deben ser o bien

abstract or 
final or 
have an empty implementation 

Justificación: Este estilo de diseño API protege contra las superclases beeing roto por las subclases. La desventaja es que las subclases están limitadas en su flexibilidad, en particular no pueden evitar la ejecución del código en la superclase, pero eso también significa que las subclases no pueden corromper el estado de la superclase al olvidar llamar al método super.

Fuente: http://sonar.15.n6.nabble.com/design-for-extension-rule-tp3200037p3200043.html

Pero ya que estás método tiene un modificador final, yo diría que ha encontrado un fallo y puede ser que desee registrar un informe de error. https://github.com/checkstyle/checkstyle/issues

+5

-1 ¿Cómo responde esto la pregunta? –

+0

@Chris Tienes razón.He modificado mi respuesta para indicar que realmente no responde la pregunta del OP. – Snekse

0

A primera vista parece que lo que en la tierra tipo de estilo de programación es esto ... Esto se comprueba si está planeando métodos que se hereda o no ... y luego se pueden declarar final,abstract or empty implementation. Entonces lo declaras final ...;) O bien la clase puede ser final o los métodos individuales dependiendo del escenario de requisitos.

+0

esto no parece responder a la pregunta. el OP está declarando que su método es definitivo, lo que parece satisfacer la regla, está buscando una explicación de por qué todavía obtiene el error. –

+0

¡Es mi mal Nathan! No lo leí correctamente. También soy nuevo aquí, así que le ruego me disculpe y tendrá más cuidado al publicar a partir de ahora. Gracias! :) –

+0

no te preocupes, leer las preguntas mal es muy fácil de hacer, lo hago todo el tiempo. –

0

Creo que este control es útil y la mayoría de las veces la advertencia está justificada. Algunas veces no es apropiado y luego lo ignoro.

Cuestiones relacionadas