java - not - lombok plugin
Java Getters y Setters (16)
Aquí hay artículos interesantes sobre el tema: http://cafe.elharo.com/java/why-java-doesnt-need-properties-it-already-has-them/
Creo que las propiedades son un atajo, pero es más una pequeña característica que una característica realmente importante
¿Existe una mejor manera estándar de crear getters y setters en Java?
Es bastante detallado tener que definir explícitamente getters y setters para cada variable. ¿Hay un mejor enfoque estándar de anotaciones?
¿Spring tiene algo como esto?
Incluso C # tiene propiedades.
Bueno, una opción es no tener tanto miedo de los campos públicos. Para las clases simples que usted sabe que nunca harán la validación o el trabajo adicional bajo el capó en get y set, los campos públicos requieren menos texto estándar, son sintácticamente más agradables y son más eficientes.
Como alternativa posible, ¿has probado Scala ? Se compila en bytecode de Java y tiene muchos accesos directos interesantes que pueden facilitar tu vida como programador de Java.
Propiedades por ejemplo:
case class Person(var name:String,
var age:Int);
val p = Person("John", 4)
p.name
p.name = "Charlie"
p.name
Y el resultado:
defined class Person
p: Person = Person(John,4)
res7: String = John
res8: String = Charlie
Con Netbeans, simplemente comience a escribir get o set donde el getter / setter va a ser reemplazado y la llamada completa automáticamente (Ctrl + Space), le dará la opción de generar el getter o setter. También le dará la opción de generar un constructor también.
Eclipse tiene una opción de menú de contexto que generará automáticamente estos para usted, ya que estoy seguro de que muchos otros IDE lo hacen.
Ese es el trabajo del IDE para generar código repetitivo detallado como getters / setters
Estoy de acuerdo en que getter / setters son verbosos. El Proyecto Lombok tiene una buena respuesta, tal como lo sugirieron otros. De lo contrario, podría usar la capacidad de su IDE para generarlos.
He creado algunas anotaciones que no son específicas de eclipse.
Ver http://code.google.com/p/javadude/wiki/Annotations
Por ejemplo:
package sample;
import com.javadude.annotation.Bean;
import com.javadude.annotation.Property;
import com.javadude.annotation.PropertyKind;
@Bean(properties={
@Property(name="name"),
@Property(name="phone", bound=true),
@Property(name="friend", type=Person.class, kind=PropertyKind.LIST)
})
public class Person extends PersonGen {
}
Mis anotaciones generan una superclase; Creo que Lombok modifica la clase real que se está compilando (que oficialmente no es compatible con Sun y puede romperse; podría estar equivocado sobre cómo funciona, pero de acuerdo con lo que he visto, deben hacerlo)
¡Disfrutar! - Scott
La mayoría de los IDE proporcionan un atajo para generar el código (por ejemplo, Eclipse: clic derecho -> Fuente -> Generar Getters & Setters ), aunque me doy cuenta de que probablemente esta no sea la respuesta que está buscando.
Algunos marcos IOC le permiten anotar propiedades para que puedan usarse en el contexto del marco, por ejemplo, Tapestry IOC, y la última primavera, creo (pero este uso está limitado al uso por parte del marco)
No estoy seguro de si lo consideraría ''estándar'', pero el Proyecto Lombok aborda este problema. Usan anotaciones para reemplazar gran parte de la verbosidad de Java.
Algunas personas buscan idiomas alternativos de hermanos de Java, como Groovy o Scala. Me temo que tomará algunos años, si es que lo hace, antes de que el JSR descubra una forma "estandarizada" de "arreglar" esto en Java propiamente dicha.
No hay mejor manera de que sea parte del lenguaje, nada como una palabra clave de "propiedad".
Una alternativa, como han mencionado otras personas, es usar su IDE para generarlos. Otro, si tiene muchos objetos que lo necesitan, es escribir su propia herramienta de generación de código que tome una clase base y produzca un contenedor con getters y setters.
También podría simplemente exponer las variables como miembros públicos. Sin embargo, en el futuro esto probablemente regrese para perjudicarte, cuando decidas agregar lógica de validación.
Sin embargo, un último pensamiento: a menos que sus clases se utilicen simplemente para transferir datos, probablemente no deberían exponer su estado interno. Las clases de "comportamiento" de IMO con getters y setters son un olor a código.
Pruebe algo como esto:
@Getter @Setter private int age = 10;
Más información a continuación:
Sí, estás un poco sin suerte. Groovy sí los genera, pero no hay dados en Java estándar. Si usa Eclipse, puede generarlos con bastante facilidad , así como también generar funciones hashCode () e iguales ().
Si usa emacs, es posible definir una macro de emacs que lo haga por usted. ¿Algún gurú de emacs por ahí? :)
También está el proyecto Spring Roo con su anotación @RooJavaBean. También tiene @RooToString y @RooHashCodeEquals o algo así. Genera en segundo plano un archivo AspectJ con los métodos adecuados.
Use su IDE para generarlo y trate de minimizar la cantidad de getters / setters que tenga; es probable que disfrute del beneficio adicional de la inmutabilidad.
Me gusta la sintaxis de C # para las propiedades, creo que es bonita y limpia, y bastante limpia.