私は注釈を適用しようとしています私の現在のBookクラスの例:その後、注釈情報を渡したりアクセスしたりする方法は?
PU
blic @interface DatabaseTable {
String tableName() default "";
}
と
public @interface DatabaseField {
String columnName() default "";
boolean generatedId() default false;
boolean canBeNull() default true;
}
そして:
@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;
....
私の注釈インターフェース私の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!");
}
}
私がしようとしているのは、クラスを受け入れ、基礎となる注釈とその値/属性を明らかにする一般的な方法ですが、私はそれについてすべて間違っていると思います。たとえば、このクラスを(私はBookであるかもしれないし、何か他のものかもしれない)どのように捉え、「これはtableNameです、これらはDatabaseFieldsとして定義したメンバ変数です。これらのフィールド」など
サイドノート:[Martin FowlerのORM憎悪に関する記事](http://martinfowler.com/bliki/OrmHate.html)は、「独自の」ORMを検討している人にとっては良い読書です。 –
私はそのリンクをクリックする前に、「基本的にそれをしないで、既存のものを使用する」という予測可能なアドバイスを提供する予定ですか? –
実際にはありません。それは常に「依存する」。しかし、簡単なORMを書いてもかなりの作業があります。 –