Cómo dar de baja las API | Java

La desactivación de una API requiere el uso de dos mecanismos diferentes: la anotación @Deprecated y la etiqueta @deprecated Javadoc.

La anotación @Deprecated marca una API de una manera que se registra en el archivo de clase y está disponible en tiempo de ejecución. Esto permite que varias herramientas, como javac y jdeprscan, detecten y marquen el uso de API obsoletas. La etiqueta @deprecated Javadoc se utiliza en la documentación de API obsoletas, por ejemplo, para describir el motivo de la desaprobación y sugerir API alternativas.

Tenga en cuenta las mayúsculas: la anotación comienza con una D mayúscula  y la etiqueta Javadoc comienza con una d minúscula.

Uso de la anotación @Deprecated

Para indicar obsolescencia, anteponga @Deprecated al módulo, clase, método o declaración de miembro. La anotación contiene estos elementos:
  • @Deprecated (since = "<version>")
    • <versión> es la versión en la que la API quedó obsoleta. Esto es para fines informativos. El valor predeterminado es la cadena vacía ("").
  • @Deprecated (forRemoval = <boolean>)
    • forRemoval = true indica que la API está sujeta a eliminación en una versión futura.
    • forRemoval = false recomienda que el código ya no utilice esta API; sin embargo, no existe la intención actual de eliminar la API. Este es el valor predeterminado.
Por ejemplo: @Deprecated (since = "9", forRemoval = true)

La anotación @Deprecated hace que la documentación generada por Javadoc se marque con uno de los siguientes, siempre que aparezca ese elemento de programa:
  • Obsoleto.
  • En desuso, para eliminación: este elemento de API está sujeto a eliminación en una versión futura.
La herramienta javadoc genera una página nombrada deprecated-list.html que contiene la lista de API obsoletas y agrega un enlace en la barra de navegación a esa página.

El siguiente es un ejemplo simple del uso de la anotación @Deprecated de la clase java.lang.Thread:
public class Thread implements Runnable {
    ... 
    @Deprecated(since="1.2")
    public final void stop() {
        ...
    }
    ...

Semántica de la obsolescencia

Los dos elementos de la anotación @Deprecated brindan a los desarrolladores la oportunidad de aclarar qué significa la desaprobación para sus API exportadas.

Para la plataforma JDK:
  • @Deprecated (forRemoval = true) indica que la API es elegible para ser eliminada en una versión futura de la plataforma JDK.
  • @Deprecated (since = " <version>") contiene la cadena de la versión de JDK que indica cuándo el elemento de la API quedó obsoleto, para aquellos obsoletos en JDK 9 y posteriores.
Si mantiene bibliotecas y produce sus propias API, entonces probablemente use la anotación @Deprecated. Debe determinar y comunicar su política sobre las eliminaciones de API. Por ejemplo, si publica una nueva biblioteca cada 6 semanas, puede optar por desaprobar una API para su eliminación, pero no eliminarla durante varios meses para que sus clientes tengan tiempo de migrar.

Uso de la etiqueta Javadoc @deprecated

Utilice la etiqueta @deprecated en el comentario de javadoc de cualquier elemento de programa obsoleto para indicar que ya no se debe utilizar (aunque pueda seguir funcionando). Esta etiqueta es válida en todos los comentarios de documentación de clase, método o campo. La etiqueta @deprecated debe ir seguida de un espacio o una nueva línea. En el párrafo que sigue a la etiqueta @deprecated, explique por qué el artículo quedó obsoleto y sugiera qué usar en su lugar. Marque el texto que hace referencia a nuevas versiones de la misma funcionalidad con una etiqueta @link.

Cuando encuentra una etiqueta @deprecated, la herramienta javadoc mueve el texto que sigue a la etiqueta @deprecated al frente de la descripción y lo precede con una advertencia. Por ejemplo, esta fuente:
/**
* ...
* @deprecated  This method does not properly convert bytes into
* characters.  As of JDK 1.1, the preferred way to do this is via the
* {@code String} constructors that take a {@link
* java.nio.charset.Charset}, charset name, or that use the platform's
* default charset.
* ...
*/
@Deprecated(since="1.1")
public String(byte ascii[], int hibyte) {
    ...
genera la siguiente salida:
@Deprecated(since="1.1")
public String​(byte[] ascii, 
    int hibyte)
Deprecated. This method does not properly convert bytes into characters. As of 
JDK 1.1, the preferred way to do this is via the String constructors that take a 
Charset, charset name, or that use the platform's default charset.
Si usa la etiqueta @deprecated Javadoc sin la correspondiente anotación @Deprecated, se genera una advertencia.

Comentarios

Entradas populares