我正在尝试练习一些重构设计模式,对于这个特定模式,我需要将我的一个方法移动到一个新类来处理复杂的条件。这是我试图移动的方法的类
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的重构功能。
答案 0 :(得分:0)
您的重构结果仍应编译。所以eclipse需要能够确定将方法移动到的可能目标。
在您的情况下,没有GradeStrategy
可用于移动它。 Eclipse不知道如何处理现有的调用者。
例如,如果您有GradeStrategy
作为方法的参数,或者作为Grade
上的字段,则可以移动它,因为有可能的候选人。