我对应该完成的代码感到非常困惑。这是它的一个片段:

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();


这种方法的其他可能用法是返回为其调用它们的实例的副本。

最后,有些工厂方法通常是静态的,并返回该类的新实例。但是,工厂方法有时在单独的工厂类中声明,而不是在它们产生的实例的同一类中声明。

10-03 00:36