private class HSV extends HorizontalScrollView {
public LinearLayout L;
public AbsoluteLayout A;
public HSV(Context context) {
super(context);
L = new LinearLayout(context);
A = new AbsoluteLayout(context);
}
@Override public void addView(View child) {
A.addView(child);
}
void update_scroll() {
removeView(L);
addView(L, 0);
L.removeView(A);
L.addView(A);
A.invalidate();
L.invalidate();
invalidate();
requestLayout();
}
int GetCurrentPos() {
return getScrollX(); // <-- this line if HSV
return getScrollY(); // <-- this line if VSV
}
... few more methods skipped, they will not change at all in 'vertical' version
}
我有這門課,它完全符合我的要求。現在我需要新的類VSV,它將從(垂直)ScrollView派生出來,並且是一樣的。我當然可以複製整個街區,並更改延伸HorizontalScrolView到延伸滾動型,然後(L,0)到(0,L)(哎呀,這是一個錯誤SO發佈的時候,肯定有行不會改變,GetCurrentPos會)。java糖,我可以在這裏避免幾乎重複的代碼?
或者我可以添加「bool vertical」屬性。但是Java沒有模板或宏,也沒有運行時原型,那麼Java中有沒有其他方法可以避免代碼重複?
有一個共同的基類,並派生一個垂直類和一個水平類。可以使用構造器參數方向(àla swing)或覆蓋。 – 2013-03-05 11:18:49
如果您從HSV派生VSV類。您可以簡單地使用空方法覆蓋addView方法。也許你應該首先將其提取到其他方法,然後重寫它。 – 2013-03-05 11:19:28
我會留在這兩個班。嘗試合併它們時,您會使代碼更復雜,更難以調試。而思考這個問題的時間不值得你節省的少量代碼。 – Kai 2013-03-05 11:28:32