Circle
またはScene
の2つの方法があり、N msごとにfill
の値を変更すると、背景が赤緑青になります。2つのオーバーロードされたメソッド、同じアクション、重複したコードの原因
二つの方法:明らかに
private void makeRGB(Circle c) {
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if(c.getFill() == Color.RED) {
c.setFill(Color.GREEN);
} else if (c.getFill() == Color.GREEN) {
c.setFill(Color.BLUE);
} else {
c.setFill(Color.RED);
}
}
},0, RGB_CHANGE_PERIOD);
}
private void makeRGB(Scene s) {
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if(s.getFill() == Color.RED) {
s.setFill(Color.GREEN);
} else if (s.getFill() == Color.GREEN) {
s.setFill(Color.BLUE);
} else {
s.setFill(Color.RED);
}
}
},0, RGB_CHANGE_PERIOD);
}
これらの私は両方含むそれらのスーパークラスを呼び出すのアプローチを使用することはできませんがCircle
とScene
と同じ継承ツリーに含まれていない、非常に似ています.setFill()
/.getFill()
メソッド。
ここでコードの重複を削除するにはどうすればよいですか?
をまた、 '静的な地図<カラー、Coolor> nextColorMap'は、単一の' updater.accept(nextColorMap.get(currentFill.get(とマルチ階建て 'if'文を置き換えることができます)))); '。 – 9000
答えをありがとう、これは私が探していたものです。私は「コンシューマー」クラスを調べる必要があります:) @ 9000チップのおかげで。 –
'Consumer' /' Supplier'を渡すのではなく、単に値を設定して取得できるので、単にプロパティを渡すことができます。 – fabian