我正在編寫一個類似AQuery的庫,但它具有操作元素的精煉語法。更好的方式來使用空檢查,類型鑄造價值?
本質上,AQuery所做的就是安全地訪問視圖層次結構,並允許您在ImageView和TextView等對象上調用子類方法。
我已經寫了通過使用下面的代碼使用View的子類的一般方法:
我Query
對象是所使用操作視圖層次結構的基本對象。基本格式如下所示:
public class Query {
private View mView;
// ...
}
接下來是通用接口。這是查詢對象的內部接口:
private interface Operation<T extends View> {
public void execute(T view);
}
接着是Query
的run
方法。這將檢查該查詢表示當前節點,並調用操作對象的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);
}
});
}
對於修改View層次結構的每個方法,我都必須編寫這個樣板文件代碼。
有什麼辦法可以重構此代碼,使像text
這樣的方法更簡單嗎?
感謝您的回答,它允許我把我的頭放在不同的空間。 :d – Brad