¿Cómo declarar o marcar un método Java como obsoleto?

5 minutos de lectura

avatar de usuario
pavel janicek

Me gustaría hacer que uno de mis métodos quede “obsoleto” = no se use más.

Pero aún así me gustaría tenerlo en mi API. Solo quiero mostrar una “advertencia” a cualquiera que use ese método.

¿Cómo puedo lograr eso?

  • ¿@Deprecrated no es una opción para usted?

    – templatetypedef

    27 de enero de 2012 a las 10:24

  • Lo es, pero no lo sabía … por eso hago la pregunta 🙂

    – Pavel Janicek

    27 de enero de 2012 a las 10:26

  • Ver docs.oracle.com/javase/1.5.0/docs/guide/javadoc/deprecation/…

    – Raedwald

    31 de enero de 2012 a las 13:39

  • ¡Los comentarios no son el lugar para las respuestas!

    – Mattumotu

    25 de enero de 2015 a las 11:35

avatar de usuario
vladimir ivanov

Usar @Deprecated en método. No te olvides de aclarar el campo javadoc:

/**
 * Does some thing in old style.
 *
 * @deprecated use {@link #new()} instead.  
 */
@Deprecated
public void old() {
// ...
}

  • ¿Cómo se vincula una biblioteca externa? por ejemplo: com.hello.api.PublicController#nuevo

    – Faizán Kazi

    7 de abril de 2017 a las 5:57

  • ¡@LinuxLars completamente de acuerdo! Java 9 agregó un par de atributos para comenzar a tomar en serio la desaprobación, pero agregó otro atributo reason con un valor predeterminado de "" no podría haber lastimado

    – preguntas

    31 de enero de 2018 a las 8:48

  • me gustaría el @deprecated el mensaje en el comentario podría agregarse a @Deprecated (un lugar para arreglarlos a todos)…

    – U. Windl

    16 de mayo de 2018 a las 12:12

  • ¿Qué hacer con un escenario de interfaz/implementación? ¿Establecer el método en desuso también en la interfaz de Java?

    – JBStonehenge

    3 de marzo a las 12:30

avatar de usuario
ShaMan-H_Fel

usa ambos @Deprecated anotación y la @deprecated Etiqueta JavaDoc.

los @deprecated La etiqueta JavaDoc se utiliza con fines de documentación.

los @Deprecated anotación indica al compilador que el método está en desuso. Esto es lo que dice en el documento de Sun/Oracles sobre el tema:

Utilizando el @Deprecated La anotación para desaprobar una clase, un método o un campo garantiza que todos los compiladores emitan advertencias cuando el código use ese elemento del programa. Por el contrario, no hay garantía de que todos los compiladores siempre emitan advertencias basadas en el @deprecated Etiqueta Javadoc, aunque los compiladores de Sun actualmente lo hacen. Es posible que otros compiladores no emitan tales advertencias. Así, usando el @Deprecated La anotación para generar advertencias es más portátil que confiar en el @deprecated Etiqueta Javadoc.

Puede encontrar el documento completo en Cómo y cuándo desaprobar las API

  • No del todo cierto. Ambas cosas javadoc y la anotación dicen que el método del compilador está en desuso

    – bohemio

    27 de enero de 2012 a las 14:44

  • @Bohemian En realidad, eso no es del todo cierto. La anotación se define en la especificación del lenguaje Java, sección 9.6.1.6 (java.sun.com/docs/books/jls/tercera_edición/html/…), mientras que la etiqueta javadoc no lo es. Entonces la anotación es parte del lenguaje. Si decide escribir su propio compilador Java, puede ignorar la etiqueta javadoc, pero debe reconocer la anotación.

    – ShaMan-H_Fel

    27 de enero de 2012 a las 15:05

  • @ShaMan-H_Fel Creo que el modelo javadoc también funciona. Porque era la única opción antes de Java 5 y funcionó. Cuando marcó un método con @deprecated javadoc (en Java 4-), el compilador marcó el método (clase, campo) como obsoleto y los IDE mostraron advertencias, incluso cuando no había ninguna fuente disponible.

    – Amir Pashazadeh

    16 de septiembre de 2017 a las 13:26


avatar de usuario
azerafati

ya que faltaban algunas explicaciones menores

Usar @Deprecated anotación en el método como este

 /**
 * @param basePrice
 * 
 * @deprecated  reason this method is deprecated <br/>
 *              {will be removed in next version} <br/>
 *              use {@link #setPurchasePrice()} instead like this: 
 * 
 * 
 * <blockquote><pre>
 * getProduct().setPurchasePrice(200) 
 * </pre></blockquote>
 * 
 */
@Deprecated
public void setBaseprice(int basePrice) {
}

recuerda explicar:

  1. ¿Por qué ya no se recomienda este método?. Qué problemas surgen al usarlo. Proporcione un enlace a la discusión sobre el asunto, si corresponde. (recuerde separar las líneas para facilitar la lectura <br/>
  2. cuando sera removido. (haga saber a sus usuarios cuánto pueden confiar en este método si deciden seguir con el método anterior)
  3. Proveer una solución o enlace al método que recomiendas {@link #setPurchasePrice()}

  • ¿No debería ser
    , en lugar de
    ?

    – argh1969

    29/10/2018 a las 18:00

  • @ argh1969, ¡verdad! No recuerdo de dónde saqué la plantilla en ese entonces. Pero puedo confirmar que ambas versiones funcionan. Aunque estoy editando a favor de los estándares.

    – azerafati

    24 de noviembre de 2018 a las 4:36

avatar de usuario
bohemio

Hay dos cosas que puedes hacer:

  1. Añade el @Deprecated anotación al método, y
  2. Agrega un @deprecated etiqueta al javadoc del método

Debería Haz ambos!

citando el documentación java en esta asignatura:

A partir de J2SE 5.0, se descarta una clase, un método o un campo mediante la anotación @Deprecated. Además, puede usar la etiqueta @deprecated Javadoc para decirles a los desarrolladores qué usar en su lugar.

El uso de la anotación hace que el compilador de Java genere advertencias cuando se usa la clase, el método o el campo en desuso. El compilador suprime las advertencias de obsolescencia si una unidad de compilación obsoleta usa una clase, un método o un campo obsoletos. Esto le permite crear API heredadas sin generar advertencias.

Se recomienda encarecidamente utilizar la etiqueta Javadoc @deprecated con los comentarios correspondientes que expliquen cómo utilizar la nueva API. Esto garantiza que los desarrolladores tendrán una ruta de migración viable desde la API anterior a la nueva API.

avatar de usuario
amit

Utilizar el anotación @Deprecated para su método, y también debe mencionarlo en sus javadocs.

  • El enlace ahora está roto

    – Yeti99

    11 de abril de 2018 a las 21:03

avatar de usuario
jham

Echa un vistazo a la @Deprecated anotación.

  • El enlace ahora está roto

    – Yeti99

    11 de abril de 2018 a las 21:03

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad