私はAndroid/Javaの初心者です。コーディングではなく、言語を使用しています。ループスイッチシーケンスを回避する際のトラブル
私の問題:行ごとに異なる色でcanvas.drawLine()
と
私は(いくつかの統計分析のために)グラフを描いています。色は配列の値に依存します。その配列(リスト)には、さまざまな型の約20個の変数を持つカスタムオブジェクトが格納されます。
ある時点で、各ドローコールに適切なタイプを取得するためにスイッチが必要ですが、ループ全体では、そのスイッチの結果は同じです。私はプログラムでほぼ終了しているので、パフォーマンスに関する問題を探しています。これは1つです。 グラフは少なくとも1000行を描画するので、スイッチは同じ結果に対して1000回実行されます。
私は配列を持ち、カスタムオブジェクトではない場合、私は単純にintを使用して異なる配列値にアクセスすることができます。しかし、オブジェクトを避けることができるように書き直す方法はありません(他の場所でコードを大きく壊してしまいます)。
今、私はいけない、正直に言うと多型と反射について読んけど...私は完全に理解し、それが防弾ではないいけない何かを実装したい(反射は、エラーを起こしやすいといわれている?!)
私の現在の解決策は、それぞれのケースに対してカスタム描画メソッドを作成したことです。私はループの前に1つのスイッチを持っているし、右のゲッターを使って描画メソッドが動作しています。それは動作しますが、1つの行だけ異なる10のメソッドを持つことは狂っているようです。
また、抽象クラスのこともありますが、上書きされたメソッドがスイッチよりもパフォーマンス上の問題を引き起こさないかどうかは分かりません。私は、Javaが最後に何をするかについて、何かを読んで、そのクロスクラスのメソッド呼び出しがパフォーマンスを損なう可能性がある(私は内部クラス/ネストされたクラスについて、そのクラス外クラスのゲッターを呼び出すことを認めた)。
私はコードをできるだけ短くて可読にしたいので、別のクラスに広がっているのではなく、ひとつのコードブロックにまとめてみたいと思っています。最も重要なことは、私が実装していることを完全に理解していることです。私はいくつかの例をコピー&ペースト 'ここにあなたの方法を入力'とそれが動作して参照してくださいしたくないが、理由や方法を知らない。
だから私は(文句を言わない傷つけるスニペットOFC;)私は実際のコードスニペットよりも、それを行うべきか、実際に理論的で、より興味を持っています)
PS:私はそれを言及すること自由に感じ、どこかにコードのにおいを持っているべき。
いくつかのコード、simplyfiedと問題
Class MyObj {
int x;
int y;
double value_doub;
short value_short;
// getters and setters etc
}
private void draw_graph(int switchcase) {
MyObj mObj;
int x;
int y;
double value;
for(int i = 0; i < amount_of_values; i++) {
mObj = mArrayList.get(i);
x = mObj.getx();
y = mObj.gety();
switch(switchcase) {
case 0:
value = mObj.get_value_doub();
//alternatively, direct field access
value = mObj.value_doub;
color = calc_color(value, scale_for_this_type);
break;
case 1:
value = (double) mObj.get_value_short();
//alternatively, direct field access
value = (double) mObj.value_short;
color = calc_color(value, scale_for_this_type);
break;
// etc... 10+ cases
}
drawLine(last_x, last_y, x, y, color);
}
}
コードを投稿できますか? – Tudor
あなたの "質問"ははるかに長いです。このすべてを単純な質問に凝縮できますか? –
こんにちは、私はそれを凝縮するのに少し問題がありますが、 "コードを壊さずにインナースイッチを避けるにはどうすればいいですか" – NikkyD