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