Пример моего текущего класса книги, которые я пытаюсь применить аннотации:Как передать/получить доступ к аннотационной информации?
@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!");
}
}
То, что я пытаюсь сделать, это сделать общий метод, который принимает класс, и сможет ли он раскрывать основные аннотации и их значения/атрибуты, но я думаю, что все это неправильно. Например, как я мог бы взять в этом классе (может быть, книга, может быть что-то еще), и иметь возможность определить «Это имя таблицы, это переменные-члены, которые мы определили как базы данных, это настройки, которые мы установили для этих полей»и т.д.
Боковое примечание: [Статья Мартина Фаулера об ОРМ-ненависти] (http://martinfowler.com/bliki/OrmHate.html) является хорошим показателем для тех, кто рассматривает возможность «сворачивания своих собственных» ОРМ. –
Прежде чем я даже щелкнул по этой ссылке, он собирается предложить предсказуемый совет «В принципе, не делай этого, просто используйте уже существующий»? –
Это не так. Это всегда «зависит». Но писать даже простой ORM - довольно много работы. –