Pregunta

Si tengo el siguiente miembro privado:

private int xIndex;

¿Cómo debo nombrar mi captador / definidor:

getXindex()
setXindex(int value)

o

getxIndex()
setxIndex(int value)

EDIT: o

getXIndex()
setXIndex(int value);

¿Fue útil?

Solución

La respuesta correcta es

getxIndex()
setxIndex(int value)

si desea que sean utilizados como propiedades de acuerdo a la sección 8.8: La capitalización de los nombres inferidos del JavaBeans especificación API (por ejemplo, acceso a ellos a través de $ {objeto. xIndex} en un JSP.

Otros consejos

De acuerdo con especificación API JavaBeans a partir de 1997 debe ser lo describe Thomas Einwaller.

private int xIndex;
public int getxIndex() { return xIndex; }
public void setxIndex(int xIndex) { this.xIndex = xIndex; }

Esto es lamentable, getX y setx no son palabras, lo que para el caso poco frecuente fueron código generado por IntelliJ también recibe una advertencia por IntelliJ. Así, mientras Esto se ajusta a la especificación JavaBeans, viola la convención de nombrar un método . En el caso raro cuando de ese modo formar una palabra o sigla que sería desinformativa, por ejemplo, la mayor parte methodsetiMessage probablemente no tiene nada que ver con SETI . Usando la única medida válida de código de calidad (WTFs por minuto), Evalúo que Esto es malo código .

Todo se reduce a esta frase de la especificación JavaBeans:

Sin embargo, para apoyar el uso ocasional de todos los nombres en mayúsculas, comprobamos si los dos primeros caracteres del nombre son mayúsculas y si es así no lo toque.

Exactamente qué tipo de uso de todos los nombres en mayúscula se refiere a está claro para mí. Los nombres de campo deben, según convención , se revistió de camello. Parece para mí que generamos nombres de métodos no convencionales con el fin de apoyar a los nombres de campos no convencionales como se decidió por una 20+ años de edad documento.

Debe también tenerse en cuenta que a pesar de que parece ser un gran apoyo para la especificación JavaBeans en herramientas, no es de uso exclusivo. P.ej. Kotlin no reconocerá xIndex como una propiedad en el ejemplo anterior. A la inversa, la Kotlin var xIndex = 0 propiedad dará lugar a la getXIndex métodos y setXIndex Java. Esto parece ser un error de acuerdo con las JetBrains apoyo, pero no veo cómo se puede arreglar eso sin hacer un cambio importante.

Algunas herramientas que ¿son compatibles con la especificación JavaBeans no siempre ha hecho, por ejemplo, Jackson y Swagger generador de código haber sido parcheado para ajustarse a la misma. A pesar de que IntelliJ generar descriptores de acceso de acuerdo con la especificación JavaBeans, la ejemplo en la documentación difiere de ella. Probablemente porque la gente no sabe acerca de la norma y, naturalmente, prefiere la normal de convención método de nomenclatura.

¿Entonces deberíamos seguir la especificación JavaBeans? Cuando los nombres de propiedad deben ser inferidas por los descriptores de acceso mediante herramientas que confiar en esta norma, entonces podríamos querer usarlo. Por ejemplo, Jackson se basará en el xIndex propiedad que se accede a través de métodos getxIndex y setxIndex menos que utilicemos anotaciones.

¿Cuándo se debe evitar este estándar Por mi recomendación:? Cuando el código debe ser leído y comprendido por los seres humanos. Debido a no usar carcasa camello adecuada cuando los métodos de nomenclatura es desinformativa.

Si tuviera mi manera, podríamos utilizar convenciones de nomenclatura normal, es decir getXIndex y setXIndex. Sin embargo, dado el estado de las cosas, la mejor solución que veo es sugerido por @vaxquis:

Nombresu campo "indexX" o cualquier otra cosa, el problema está resuelto ... hacer las cosas no complicar en exceso - incluso si setxIndex es la forma correcta para las judías, teniendo método denominado setxIndex aumenta el factor de WTF del código sin darle nada a cambio.

Cualquier comentario sobre la especificación JavaBeans debe, según la especificación en sí, se enviará a java-beans@java.sun.com.

Should be:

getXIndex()
setXIndex(final int xIndex)

Methods should be verbs, in mixed case with the first letter lowercase, with the first letter of each internal word capitalized.

You should use Introspector.decapitalize from package java.beans and you have no problem beacause it is compliant with java rules.

Eclipse ide automatically generates setters and getters as:

getxIndex()
setxIndex(int value)

Which is according to the java beans API specification.

I think getXindex() is the best way. The getter should start with 'get', followed by the member name, with its first letter capitalized. Also the latest conventions I heard of, say that we should avoid multiple capital letters one after another. For example getHTMLtooltip is wrong. it should be getHtmlTooltip instead. Also you should try to make all your members final and there should not be a need of setters, since the class will be immutable ;)

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