Eclipse: Extract Method功能失败



为了使冗长的方法具有更好的可读性,我想用方法替换重复使用的代码块(仅赋值)。因此,我选择了代码块并运行Eclipse的Extract Method特性,但是失败了,出现以下错误:

歧义返回值:所选块包含多个局部变量赋值。受影响的变量有:

int foo
double[] bar

我该如何解决这个问题?它应该是一个简单的void方法,执行几个赋值,我不确定Eclipse(3.6.2)抱怨什么。

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

以及this:

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
    }

这些只是赋值还是声明?因为它们看起来像是声明。当您尝试将它们提取到一个方法中时,变量将只在新方法中可见,因此Eclipse希望返回它们,使它们在调用块中可用。

如果可能的话,可以将变量设为全局变量(即成员变量),然后将赋值代码放入一个额外的方法

编辑:

正如stacker指出的那样,Eclipse希望返回在新方法中修改的所有变量。由于Java使用按值调用,这对于基本类型是必要的。因为对它们的赋值只在提取的方法中可见,而在外部不可见。

最新更新