例子我想說明適用於:如何傳遞/訪問註釋信息?我目前的圖書類的
@DatabaseTable(tableName = "books")
public class Book {
@DatabaseField(generatedId = true)
private int mId;
@DatabaseField(columnName = "book_name", canBeNull = false)
private String mBookName;
@DatabaseField(canBeNull = false)
private String mAuthorName;
....
我的註釋接口:
PU
blic @interface DatabaseTable {
String tableName() default "";
}
和
public @interface DatabaseField {
String columnName() default "";
boolean generatedId() default false;
boolean canBeNull() default true;
}
然後在我的MainActivity中我嘗試過:
public class MainActivity extends AppCompatActivity {
private final String LOG_TAG = getClass().getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Book book = new Book("The Book of Kittens", "Mr. Smith");
outputInfoAboutClass((Class<? extends DatabaseTable>) book.getClass());
}
private void outputInfoAboutClass(Class<? extends DatabaseTable> aClass) {
Log.i(LOG_TAG, "Class simple name: " + aClass.getSimpleName());
for (Field field : aClass.getFields()) {
Log.i(LOG_TAG, "Field name: " + field.getName());
}
for (Annotation annotation : aClass.getAnnotations()) {
Log.i(LOG_TAG, "Annotation name: " + annotation.toString());
}
Log.i(LOG_TAG, "End of logging!");
}
}
我想要做的是制定一個通用的方法,它接受一個類,並能夠揭示底層註釋和它們的值/屬性,但我認爲我會做的全部錯誤。例如,我將如何參與這個類(可能是一本書,可能是其他內容),並能夠確定「這是tableName,這些是我們定義爲DatabaseFields的成員變量,這些是我們設置的設置對於這些領域,」等
附註:[Martin Fowler關於ORM討厭的文章](http://martinfowler.com/bliki/OrmHate.html)對於任何考慮「滾動自己的」ORM的人來說都是一個很好的解讀。 –
在我點擊那個鏈接之前,是否會提供可預測的建議:「基本上不這樣做,只是使用一個已有的」? –
實際上並不是。它總是「依賴」。但是編寫一個簡單的ORM是相當多的工作。 –