2012-01-27 33 views
224

Me gustaría hacer que uno de mis métodos "desaprobado" = no se use nunca más.¿Cómo declarar o marcar un método Java como obsoleto?

Pero aun así me gustaría tenerlo en mi API. Solo quiero mostrar "advertencia" a cualquiera que use ese método.

¿Cómo puedo lograr eso?

+9

¿se @Deprecrated no es una opción para usted ? – templatetypedef

+11

Lo es, pero no lo sabía ... por eso estoy haciendo la pregunta :) –

+11

Observe con atención la ortografía '@ Deprecated'. 3 e's, no 4. (También no 2da 'r';). –

Respuesta

467

Use @Deprecated en el método. No se olvide de aclarar campo javadoc:

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

Buenos ejemplos siempre son útiles, gracias. –

+1

¡Respuesta corta y buena! – Robert

+5

Sería bueno si @Deprecated tuviera un parámetro para qué usar en su lugar ... – LinuxLars

30

Hay dos cosas que puede hacer:

  1. Añadir la anotación @Deprecated al método, y
  2. Añadir una etiqueta @deprecated el Javadoc del método

Debe hacer ambos!

Citando al java documentation sobre este tema:

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

Al usar la anotación, el compilador de Java genera advertencias cuando se usa la clase, el método o el campo en desuso. El compilador suprime las advertencias de desaprobación si una unidad de compilación obsoleta usa una clase, método o campo en desuso. Esto le permite construir API heredadas sin generar advertencias.

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

+0

Significa que el comentario de javadoc es muy recomendable *** además *** a la anotación, no como un reemplazo! Es por eso que siempre es mejor poner ambos. –

+0

@ morellet.d Gracias por señalarlo. Básicamente reescribí mi respuesta ahora (¡No leí el documento con suficiente cuidado!). Cheers – Bohemian

7

Uso del annotation@Deprecated para su método, y también se debe mencionar que en sus javadocs.

3

Eche un vistazo a la anotación @Deprecated.

68

Utilice la anotación @Deprecated y la etiqueta @deprecated JavaDoc.

La etiqueta @deprecated JavaDoc se utiliza con fines documentales.

La anotación @Deprecated indica al compilador que el método está en desuso. Aquí es lo que dice en el documento Sun/oráculos sobre el tema:

Utilizando la anotación @Deprecated despreciar a una clase, método o campo asegura que todos los compiladores emitirán advertencias cuando el código utiliza ese elemento del programa. Por el contrario, no hay ninguna garantía de que todos los compiladores emitan siempre advertencias basadas en la etiqueta Javadoc, aunque actualmente los compiladores de Sun lo hacen. Otros compiladores no pueden emitir tales advertencias.Por lo tanto, usar la anotación @Deprecated para generar advertencias es más portátil que confiar en la etiqueta @deprecated Javadoc.

Puede encontrar el documento completo en How and When to Deprecate APIs

+1

No del todo cierto. * Ambos * javadoc y la anotación dicen que el método del compilador está en desuso – Bohemian

+14

@Bohemio En realidad eso no es del todo cierto. La anotación se define en la sección de especificación de lenguaje de Java 9.6.1.6 (http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html#9.6.1.6), mientras que la etiqueta de javadoc no lo está. Entonces la anotación es parte del lenguaje. Si decide escribir su propio compilador de Java, puede ignorar la etiqueta de javadoc, pero debe reconocer la anotación. –

+0

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

28

ya que algunas explicaciones menores faltaban

Uso @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) { 
} 

recordar a explicar:

  • ¿Por qué es este método ya no se recomienda, remeber a la línea separada para facilitar la lectura </br>
  • Cuando será eliminado (que los usuarios sepan lo mucho que todavía puede confiar en este método si decidieron adherirse a la manera antigua)
  • Proporcionar una solución o vínculo con el método que recomienda {@link #setPurchasePrice()}
Cuestiones relacionadas