我最近在Java中制作了类似俄罗斯方块的游戏,我有一个IBlocks接口ConsBlock
和EmptyBlock
(ConsBlock
是一个在开始时有一个块的列表最后有一个IBlock
列表,出于某种原因,这就是我老师想要的方式。)
我在界面中有getfirst()
功能:
public interface IBlocks{
//returns the first block in a list of blocks
public Resting getfirst();
(A Resting
是游戏中的一个区块)
然后,在ConsBlock类中,我有:
public class ConsBlock implements IBlocks{
//returns the first block in a list of blocks
public Resting getfirst(){
return this.first;
但是在EmptyBlock
课程中,我希望它返回类似于没有一个类似的东西。我尝试返回null
,但由于接口中的函数告诉它返回Resting
这一事实,这给了我一个空指针异常。如果没有用随机数返回Resting,表示空单的最佳方法是什么?
答案 0 :(得分:1)
public interface IResting;
public class Resting implements IResting;
然后
public class EmptyResting implements IResting {
@Override
public Object sampleMethod() {
// return what an empty block ought to return
}
}
进一步阅读:http://en.wikipedia.org/wiki/Null_Object_pattern
回复你的评论:你仍然需要这样做:
public class EmptyBlock implements IBlocks {
@Override
public IResting getFirst() {
return new EmptyResting();
}
}
请注意,您的IBlocks
和ConsBlock
课程需要返回IResting
而不是Resting
请务必阅读该wiki链接!
答案 1 :(得分:0)
我可能会偏离这个但是,我相信你的方法标题是要求让Resting返回。有没有办法可以创建一个布尔对象并返回?也许把它命名为空的,如果它是空的,它返回true,如果它不是空的,它返回false?另一个建议是,如果满足设置为零的条件,则手动将Resting设置为0,例如if(条件满足){returnedResting = 0; }。