una tiene terminar que partes para las generar español documentar documentacion con comentario comando codigo cada archivo java intellij-idea documentation javadoc

tiene - javadoc eclipse



¿Cómo usar la etiqueta @value en javadoc? (2)

Estoy usando una clase con constructor privado en lugar de una enumeración (esto es un requisito). Y ahora estoy tratando de agregar etiquetas javadoc para documentar cada entidad public static final .

1) ¿Cuál es el lugar preferido para poner etiquetas javadoc: como ob1 u ob2 ?

2) Ambas opciones generan un error en la @value tag must reference field with a constant intializer. IDEA @value tag must reference field with a constant intializer.

/** * {@value #ob1} object1 description */ public class MyClass { public static final Object ob1 = new Object(); /** * {@value #ob2} object2 description */ public static final Object ob2 = new Object(); private MyClass() {} }


2) Ambas opciones generan un error en la etiqueta IDEA @value que debe hacer referencia al campo con un intializador constante.

No tiene mucho sentido agregar expresiones no constantes al Javadoc.

Al principio, uno podría pensar que el comportamiento más sensato sería agregar un toString al Javadoc. Pero entonces, ¿qué pasa si tienes un objeto mutable como:

class MutableInteger { public int i; public String toString() { return Integer.toString(i); } }

y un Javadoc como:

/** * {@value #obj} */ class Class { public static final MutableInteger obj = new MutableInteger(0); }

Entonces uno podría simplemente hacer más tarde:

Class.obj.i = 1;

así que agregar 0 al Javadoc no significaría mucho.

Solo funciona para cadenas porque son inmutables y JLS lo dice explícitamente: no hay forma de que le digas al compilador que en una clase personalizada.


No creo que la respuesta de Kayaman sea suficiente, ya que la pregunta es cómo usar la etiqueta @value en javadocs.

Creo que el problema radica en el hecho de que el valor del campo al que se hace referencia no es un valor literal.

En eclipse, cuando tengas

/** * {@value #ob2} object2 description */ public static final Object ob2 = new Object();

Los Javadocs generados son {@value # ob2} descripcion de object2 . Sin embargo, cuando tienes

/** * {@value #ob2} object2 description */ public static final String ob2 = "hello";

Los Javadocs generados son "hello" object2 description (el resultado esperado).

Entonces, en resumen, está utilizando la etiqueta @value correctamente en los javadocs, pero el valor solo se procesará correctamente si el campo se ha inicializado con un valor literal.