Я пишу библиотеку, похожую на AQuery, но с уточненным синтаксисом для управления элементами.Лучший способ использовать значение null checked, type casted value?
По существу, что AQuery обеспечивает безопасный доступ к иерархии представлений и позволяет вызывать методы подкласса на таких объектах, как ImageView и TextView.
Я написал общий способ использовать подкласс View, используя следующий код:
Моего Query
объекта является базовым объектом, который используется для управления иерархией просмотра. Основной формат выглядит следующим образом:
public class Query {
private View mView;
// ...
}
Далее приведен общий интерфейс. Это внутренний интерфейс объекта запроса:
private interface Operation<T extends View> {
public void execute(T view);
}
Далее идет run
метод Query
. Это проверяет текущий узел представляет этот запрос и вызывает execute
методы объекта операции, если она успешна:
private <T extends View> Query run(Class<T> cls, Operation<T> operation) {
T t = cls.cast(mView);
if (t == null) {
Log.e(TAG, "view is not a " + cls.getSimpleName());
} else {
operation.execute(t);
}
return this;
}
Так что теперь код шаблона написан, я использую методы, подобные этим, чтобы реализовать функциональные возможности:
public Query text(final CharSequence str) {
return run(TextView.class, new Operation<TextView>() {
@Override
public void execute(TextView view) {
view.setText(str);
}
});
}
Для каждого метода, который изменяет иерархию вида, я должен написать этот шаблонный код.
Есть ли способ, который я могу реорганизовать этот код, чтобы методы, подобные text
проще?
Спасибо за ответ, это позволило мне положить голову в другое пространство. : D – Brad