我对应该完成的代码感到非常困惑。这是它的一个片段:
public class PuzzleStateSimple implements PuzzleState {
public PuzzleState moveUp() {
return null;
}
public int[] getStateArray() {
}
}
我不明白这里发生了什么。我是否应该返回课程本身?还是构造一个新的
PuzzleStateSimple
对象并将其返回?此类看起来像不是按照Singleton模式设计的。这是使用此类的测试用例的片段:
public void testMoveUp(){
// 2 8 3 2 0 3
// 1 0 4 -> 1 8 4
// 7 6 5 7 6 5
PuzzleState start = createPuzzleState(puzzleCenterPosition.clone()) ;
PuzzleState goal = createPuzzleState(puzzleFirstRowMiddlePosition2.clone()) ; // note: 2 puzzles of that kind, 2nd one is it
PuzzleState result = start.moveUp();
assertTrue("Expected" + printPuzzle(goal.getStateArray()) + ", computed: " + printPuzzle(result.getStateArray()),
goal.isEqual(result));
}
提前致谢。
最佳答案
返回类实例的非静态方法通常在对其状态进行某种操作后返回this
。它们的目的是允许链接呼叫,例如:
PuzzleState obj = new PuzzleState();
obj.moveUp().moveRight().moveUp();
这种方法的其他可能用法是返回为其调用它们的实例的副本。
最后,有些工厂方法通常是静态的,并返回该类的新实例。但是,工厂方法有时在单独的工厂类中声明,而不是在它们产生的实例的同一类中声明。