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
}
私はこのクラスを持っています。今私は(垂直)ScrollViewから派生し、まったく同じ新しいクラスのVSVが必要です。私は確かにちょうど確かにそれ、(L、0)(L、0)に SO上で公開するとき(おっと、これは間違いだったにHorizontalScrolViewを拡張するにはScrollViewを拡張して、ブロック全体をコピーして、を変更することができます行は変わらない、GetCurrentPosは)。java sugaring、ここではほぼ同じコードを避けることはできますか?
または "bool vertical"プロパティを追加できます。しかし、Javaにはテンプレートやマクロ、ランタイムプロトタイピングがありません。この例では、コードの重複を避けるためにJavaに他の方法がありますか? android.widget.ScrollViewとandroid.widget.HorizontalScrollViewのドキュメントを見てみると
共通の基本クラスを持ち、垂直クラスと水平クラスを導出します。コンストラクタのパラメータの向き(スイング)またはオーバーライドを使用します。 –
HSVからVSVクラスを派生させる場合。単純にaddViewメソッドを空のメソッドでオーバーライドすることができます。たぶん、他のメソッドに最初に抽出して、それをオーバーライドする必要があります。 –
私はこれら2つのクラスにとどまります。それらをマージしようとすると、コードをより複雑にしてデバッグするのが難しくなります。そして、これについて考える時は、あなたが保存しているコードのほんの些細な行の価値がありません。 – Kai