2

固定数の変数のコードブロックが必要です。たとえば、次のようにします。

MyGenericClass<T> v1,v2,v3;
/* ... */
{
    /* something with v1 */
}
{
    /* same thing with v2 */
}
{
    /* same thing with v3 */
}

コードの重複を避けたい。これを行う最善の方法は何ですか (このコードは頻繁に実行されるため、GC 用のオブジェクトを作成しないことを願っています)。

これは機能します:

for (MyGenericClass<S> v : new MyGenericClass[] {v1,v2,v3}) {
    /* something with v - no casting */
}

次のように、型の安全性に関する警告が表示されます。

for (MyGenericClass<S> v : Arrays.asList(v1,v2,v3) {
    /* something with v - no casting */
}

これらのうち、どちらを優先する必要がありますか? そして、より良い代替手段はありますか?

4

1 に答える 1

5

これは私のやり方です:

MyGenericClass<T> v1,v2,v3;
   foo(v1);
   foo(v2);
   foo(v3);
}
private void foo(MyGenericClass<T> v)
{
    /* something with v */
}

ソリューションは追加のオブジェクトを作成します (最初のオブジェクトは配列を作成し、2 番目は配列、リスト、イテレータを作成します)。私の関数呼び出しは、頻繁に呼び出されるとコンパイラによってインライン化され、参照はヒープではなくスタックに格納されます。

于 2012-08-13T11:00:16.867 に答える