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 */
}

您的解决方案将创建额外的对象(第一个将创建一个数组,第二个将创建一个数组、一个列表和一个迭代器)。如果我的函数调用被大量调用,编译器将对其进行内联,并且引用将存储在堆栈中而不是堆中。

于 2012-08-13T11:00:16.867 回答