¿Cuáles son los beneficios del uso de la notación @Deprecated sólo en la interfaz?

StackOverflow https://stackoverflow.com/questions/1267845

  •  13-09-2019
  •  | 
  •  

Pregunta

Para la programación Java, ¿cuáles son algunos de los beneficios de la utilización de la notación de @Deprecated y método de interfaz, pero no en la clase que lo implementa?

public interface Joe {

    @Deprecated
    public void doSomething();

    ...
}

public final class Joseph implements Joe {

    public void doSomething() {
       ...
    }

    ...
}
¿Fue útil?

Solución

Creo que es un defecto en el propio lenguaje Java y no tiene sentido para especificar un método en una interfaz como obsoletos a través de una anotación y no tiene el método considerado obsoleto en la clase que implementa.

Sería mejor si el @ desaprobado-dad del método se hereda. Por desgracia, parece Java no soporta esto.

Tenga en cuenta cómo los útiles, tales como un IDE, trata a esta situación: si el tipo de una variable es declarada como la interfaz, a continuación, los métodos @deprecated se pueden representar con una huelga a través. Pero si el tipo de una variable es declarada como la clase que implementa la clase y la firma no incluyen @deprecated, entonces el método debe administrarse sin una huelga a través.

La pregunta fundamental es: ¿Qué significa para un método a ser obsoleto en una interfaz pero no de una clase que implementa (o en una interfaz que se extiende)? La única intención es razonable para que el método sea desaprobado por todo debajo de la interfaz en la jerarquía de clases. Pero el lenguaje no es compatible con ese comportamiento.

Otros consejos

@Deprecated es la documentación. Si la gente del mismo en una interfaz que puede marcar ciertos aspectos de esa interfaz como obsoletos. Así la gente sabe que no lo uso.

La clase de implementación de la interfaz es un detalle. Un método en el que la clase pasa a satisfacer la interfaz pero no puede estar en desuso por su propia cuenta. Deprecating que el método puede o no puede ser apropiado.

La creación de una nueva clase que implementa una interfaz significa que es necesario poner en práctica los métodos obsoletos. Probablemente debería funcionar a menos que sepa que los clientes de la clase no utilizan los métodos obsoletos. Por ejemplo, si va a crear un contenedor de servlets HTTP que necesita para poner en práctica el método HttpServletResponse.encodeUrl() pesar de que está desfasada y en encodeURL(). Esto se debe a un usuario de su clase puede llamar a ese método en desuso.

en mi opinión, es controvertido una interfaz método obsoleto no debe no hacer uso, que es la aplicación (indique los contraejemplos si no)

Si queremos refactorizar el código existente con métodos inadecuados en la interfaz y en la puesta en práctica, entonces podemos utilizar @Deprecated en los métodos de interfaz en favor de nuevos métodos de limpieza temporalmente para algunos lanzamientos. Puede ser feo, sólo para mantener el código compatible con versiones anteriores podemos hacer uso de ella. Esto mostrará en el informe IDE y SONAR que es un método obsoleto y obligando a los clientes a utilizar nuevos métodos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top