我創建了簡單的註解在Java中Java註解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Column {
String columnName();
}
和類
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;
}
}
我需要遍歷所有領域,被標註有Column
並得到名和值的字段和註釋。但我得到值每個領域的問題,因爲他們都是不同的數據類型。
有沒有什麼會返回具有某些註釋的字段的集合? 我設法用這段代碼來做,但我不認爲這種反射是解決它的好方法。
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);
}
}
我一定要在包裝物各個領域,這將實現像getValue()
方法,還是有一些解決這個更好的辦法?基本上我需要的是每個被註釋的字段的字符串表示。
編輯:yep field.get(table)
作品,但只有public
領域,有沒有什麼辦法如何做到這一點,即使是private
領域?或者我必須讓getter和以某種方式援引它?
setAccessible。如果您有安全管理器,陣列版本會更快。當你擁有安全管理員的情況下,setAccessible當然是非常危險的。 – 2009-04-10 16:22:53
可怕...看起來你正在實施你自己的版本JPA – basszero 2009-04-10 16:29:48
@basszero:是的你是對的,我必須爲我的大學項目做這個,因爲我的愚蠢的老師住在山洞裏,不允許使用任何圖書館,如Toplink等... – 2009-04-10 17:24:19