我对这段代码感到很困惑,我想这是完成的。以下是它的片段:
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));
}
提前致谢。
答案 0 :(得分:2)
返回类实例的非静态方法通常在对其状态进行一些操作后返回this
。他们的目的是允许链接电话,例如:
PuzzleState obj = new PuzzleState();
obj.moveUp().moveRight().moveUp();
此类方法的其他可能用途是返回调用它们的实例的副本。
最后,有工厂方法,通常是静态的,并返回类的新实例。但是,工厂方法有时在单独的工厂类中声明,而不是在它们生成的实例的同一类中声明。
答案 1 :(得分:0)
public PuzzleState moveUp() {
return null;
}
在这个签名中它需要PuzzleState
类型的实例作为回报(不是Class
类型的实例),查看命名似乎方法需要进行一些更改实例的内部状态并返回相同的内容实例返回ie return this;
答案 2 :(得分:0)
如果这应该是一个不可变对象:
public class PuzzleStateSimple implements PuzzleState {
final public int x;
final public int y;
public PuzzleStateSimple(int x, int y) {
this.x = x;
this.y = y;
}
public PuzzleState moveUp() {
return new PuzzleStateSimple(x, y-1);
}
}
这允许方法链接:PuzzleState newState = currentState.moveUp().moveUp();