Refactor缺少课程 - >移入Eclipse Luna

时间:2015-04-17 06:15:39

标签: java eclipse refactoring

我正在尝试练习一些重构设计模式,对于这个特定模式,我需要将我的一个方法移动到一个新类来处理复杂的条件。这是我试图移动的方法的类

public class Grade
{
    public static double A_GRADE = 0.9;
    public static double B_GRADE = 0.8;
    public static double C_GRADE = 0.7;
    public static double D_GRADE = 0.6;

    private double grade;

    public Grade(double grade)
    {
        this.grade = grade;
    }

    double getGrade() { return grade; }
    void setGrade (double newGrade) { this.grade = newGrade; }

    public String determineGradeLetter()
    {
        if (grade <= 1.0 && grade >= 0)
        {
            if (grade >= A_GRADE) { return "A"; }
            else if (grade >= B_GRADE) { return "B"; }
            else if (grade >= C_GRADE) { return "C"; }
            else if (grade >= D_GRADE) { return "D"; }
            else { return "F"; }
        }
        else { System.out.println("Invalid Grade") }
    }
}

我突出显示determineGradeLetter()方法并执行Right Click -> Refactor -> Move。当弹出菜单打开时,该类(称为GradeStrategy)未列出。

您认为可能出现什么问题?我正在运行Eclipse Luna。

另外,我知道我可以将方法复制并粘贴到GradeStrategy类中,并在Grade参数中添加determineGradeLetter()对象,但我想充分利用Eclipse的重构功能。

1 个答案:

答案 0 :(得分:0)

您的重构结果仍应编译。所以eclipse需要能够确定将方法移动到的可能目标。

在您的情况下,没有GradeStrategy可用于移动它。 Eclipse不知道如何处理现有的调用者。

例如,如果您有GradeStrategy作为方法的参数,或者作为Grade上的字段,则可以移动它,因为有可能的候选人。