tôi đã tạo ra chú thích đơn giản trong JavaJava chú thích
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Column {
String columnName();
}
và lớp
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;
}
}
tôi cần để lặp qua tất cả các lĩnh vực, được chú thích với Column
và nhận tên và giá trị của trường và chú thích. Nhưng tôi gặp vấn đề với việc nhận được giá trị của mỗi trường, vì tất cả chúng đều khác nhau kiểu dữ liệu.
Có bất kỳ điều gì sẽ trả lại tập hợp các trường có một số chú thích nhất định không? Tôi đã làm điều đó với mã này, nhưng tôi không nghĩ rằng sự phản chiếu là cách tốt để giải quyết nó.
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);
}
}
Tôi có phải quấn mọi lĩnh vực trong đối tượng, trong đó sẽ thực hiện phương pháp như getValue()
, hoặc là có một cách nào đó tốt hơn việc này? Về cơ bản tất cả những gì tôi cần là biểu diễn chuỗi của mỗi trường được chú thích.
chỉnh sửa: yep field.get(table)
hoạt động, nhưng chỉ cho các trường public
, có cách nào để thực hiện việc này ngay cả đối với các trường private
không? Hoặc tôi có phải làm cho getter và bằng cách nào đó gọi nó?
setAccessible. Phiên bản mảng sẽ nhanh hơn nếu bạn có trình quản lý bảo mật. setAccessible là, tất nhiên, rất nguy hiểm trong các tình huống mà bạn có trình quản lý bảo mật. –
đáng sợ ...có vẻ bạn đang thực hiện phiên bản JPA – basszero
@basszero của riêng bạn: bạn đúng, tôi phải làm điều này cho dự án đại học của tôi vì giáo viên ngu ngốc của tôi sống trong hang và không cho phép sử dụng bất kỳ thư viện nào như Toplink vv ... –