que he creado en Java simple anotaciónanotaciones Java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Column {
String columnName();
}
y la clase
public class Table {
@Column(columnName = "id")
private int colId;
@Column(columnName = "name")
private String colName;
private int noAnnotationHere;
public Table(int colId, String colName, int noAnnotationHere) {
this.colId = colId;
this.colName = colName;
this.noAnnotationHere = noAnnotationHere;
}
}
necesito iterar sobre todos los campos, que están anotados con Column
y obtener nombre y valor de campo y anotación. Pero tengo un problema al obtener el valor de cada campo, ya que todos ellos son de tipo de datos .
¿Hay algo que devuelva la colección de campos que tienen cierta anotación ? Pude hacerlo con este código, pero no creo que esa reflexión sea una buena forma de resolverlo.
Table table = new Table(1, "test", 2);
for (Field field : table.getClass().getDeclaredFields()) {
Column col;
// check if field has annotation
if ((col = field.getAnnotation(Column.class)) != null) {
String log = "colname: " + col.columnName() + "\n";
log += "field name: " + field.getName() + "\n\n";
// here i don't know how to get value of field, since all get methods
// are type specific
System.out.println(log);
}
}
¿Tengo que envolver cada campo en el objeto, lo que pondría en práctica el método como getValue()
, o hay alguna forma mejor de evitar esto? Básicamente, todo lo que necesito es una representación de cadena de cada campo anotado.
editar: yep field.get(table)
funciona, pero solo para los campos public
, ¿hay alguna forma de hacerlo incluso para los campos private
? ¿O tengo que hacer getter y de alguna manera invocarlo?
setAccessible. La versión de matriz será más rápida si tiene un administrador de seguridad presente. setAccessible es, por supuesto, muy peligroso en situaciones donde tienes administrador de seguridad. –
miedo ...Parece que estás implementando tu propia versión de JPA – basszero
@basszero: sí, tienes razón, tengo que hacer esto para mi proyecto de universidad debido a mi estúpido maestro que vive en una cueva y no permite el uso de ninguna biblioteca como Toplink etc ... –