2012-11-09 23 views
0

我一直在做一個類似俄羅斯方塊的遊戲在Java中最近,我有越過ConsBlockEmptyBlockConsBlock一個接口IBlocks是在beginnning和塊列表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,這給了我一個空指針異常。如果不用隨機數字返回休息狀態,代表一個空白表達式的最佳方式是什麼?

+3

你可以在哪裏出現'NullPointerException'的代碼? – asgs

+0

下面的答案很好,但你也可以檢查'object == null'。 – irrelephant

+0

@asgs NullPointerException: public class EmptyBlock implements IBlocks {//返回列表中的第一個東西 public Resting getfirst(){ return null; – cheifing

回答

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

請注意,您IBlocksConsBlock類需要返回IResting不是Resting

請務必閱讀維基鏈接!

+0

我試過把它放到EmptyBlock中,但它返回:* EmptyBlock不是抽象的,並且不覆蓋IBlocks *中的抽象方法getfirst()。似乎它甚至不認識@Override在那裏,當我把它拿出來時它也是一樣。 – cheifing

+0

@cheifing我通過編輯我的帖子回覆了你 – durron597

0

我可以離開這個基地,但是,我相信你的方法頭要求有一個休息返回。有什麼方法可以創建一個布爾對象並返回?也許將其命名爲空,如果它是空的,則返回true,如果它不爲空,則返回false?另一個建議是手動設置Resting爲0,如果它滿足設置爲零的條件,例如if(condition is met){returnedResting = 0; }。

相關問題