我想要一些固定数量的变量的代码块,比如说:
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 */
}
我更喜欢哪一项?还有更好的选择吗?
答案 0 :(得分:5)
这将是我的方式:
MyGenericClass<T> v1,v2,v3;
foo(v1);
foo(v2);
foo(v3);
}
private void foo(MyGenericClass<T> v)
{
/* something with v */
}
您的解决方案将创建额外的对象(第一个将创建一个数组,第二个将创建一个数组,一个列表和一个迭代器)。如果调用它,我的函数调用将由编译器内联,并且引用将存储在堆栈而不是堆中。