为了更好地阅读冗长的方法,我想用方法替换重复使用的代码块(仅分配)。因此,我选择了代码块并运行了Eclipse的 Extract Method 功能,但是由于此错误而失败:
不明确的返回值:所选块包含多个局部变量赋值。受影响的变量是:
int foo double[] bar
我该如何解决这个问题?它应该是一个简单的void
方法做一些任务,我不确定Eclipse(3.6.2)抱怨什么。
答案 0 :(得分:5)
Eclipse需要所有用作参数的变量,并返回在提取的块中修改的一个或没有变量。
你的问题是像
这样的结构void f2() {
int a,b;
int foo=0; // selection start
double[] bar = new double[10];
for ( int i = 0 ; i < bar.length ; i++ ) {
bar[i] = foo;
}
foo = 0; // selection end
a = foo;
b = (int) bar[0];
}
由于在进一步的语句中需要两个变量(foo,bar),因此它们不能作为一个值返回。 你可以返回一个包含foo和bar的类。
将它们声明为成员变量
public class Refactor {
int foo ;
double[] bar;
void f2() {
for ( int i = 0 ; i < bar.length ; i++ ) { // selection start
bar[i] = foo;
}
foo = 0; // selection end
}
}
以及:
void f2() {
int foo=0; // selection start
double[] bar = new double[10];
for ( int i = 0 ; i < bar.length ; i++ ) {
bar[i] = foo;
}
foo = 0; // selection end
}
答案 1 :(得分:2)
这些只是作业还是声明?因为看起来它们是声明。当您尝试将它们提取到方法中时,变量只能在新方法中可见,因此,Eclipse希望返回它们,以使它们在调用块中可用。
如果可能,您可以将变量设为全局变量(即成员变量),然后将赋值代码放入额外的方法
编辑:
正如堆栈器指出的那样,Eclipse希望返回在新方法中修改的所有变量。由于Java使用call-by-value,因此这对于原始类型是必需的。因为它们的分配仅在提取的方法中可见,但不在外部。