2013-04-04 87 views
1

檢查位置是否被佔用的最佳方法是什麼?如果對象的實例存在我不認爲我應該用「這個== NULL」 ......如何檢查Java中的對象是否爲空?

class Cell { 
    int column; 
    int row; 
    char letter; 

    public Cell(int column, int row, char letter) { 
     super(); 
     this.column = column; 
     this.row = row; 
     this.letter = letter; 
    } 

    public boolean isEmpty() { 
     if (this==null) return true; 
     else return false; 
    } 
} 
+9

'this'可*永遠*是'null'因爲它指向當前對象。你需要一些其他的方式來表明'Cell'是空的,例如另一個變量(一個布爾值,也許是?) – 2013-04-04 00:47:25

+0

Derek Greer,http://lostechies.com/derekgreer/tag/tdd/,有一組使用TDD編寫井字遊戲的例子,他面臨着如何渲染單元格的類似問題。但是,它在C#中。無論如何,我都會推薦它。 – 2013-04-04 01:07:59

回答

2

我要去假設char是你Cell的內容和要檢查如果內容null

首先,this永遠不可能是nullthis是當前對象,因此始終存在。

您正在使用一個char - 因爲這是一個原始的也不能是null。改變對象的包裝,並檢查了null

class Cell { 

    int column; 
    int row; 
    Character letter; 

    public Cell(int column, int row, Character letter) { 
     this.column = column; 
     this.row = row; 
     this.letter = letter; 
    } 

    public boolean isEmpty() { 
     return letter == null; 
    } 
} 

另外一個需要注意的是,父類的構造總是默認名稱,沒有理由罵super()

+0

謝謝。如果我不允許更改字母的類型,是否有任何選項? – ampc 2013-04-04 01:02:50

+1

從[this](http://stackoverflow.com/questions/9909333/whats-the-default-value-of-char)如果'\ u0000'不是可打印字符,'char'的默認值 - 你可以測試。然而,不太強大。 – 2013-04-04 01:05:05

+0

我猜你不想從'char'改成'Character',因爲你在其他代碼中已經使用原始'char's?由於[autoboxing](http://docs.oracle.com/javase/7/docs/technotes/guides/language/autoboxing.html),您應該能夠透明地切換到「Cell」類中的「Character」。因此,如果'Cell'使用'Character'而不是'char',那麼構造一個新的'Cell'(像'Cell c = new Cell(2,3,'x');'),並且可以使用'null '檢查。否則,你必須爲'letter'選擇一些默認值來檢查,可能是'\ u0000' bmorris591建議的。 – ajp15243 2013-04-04 01:28:22

0

,那麼就不能null! (正如Code-Guru的評論所說)。但是,您要做的是檢查對象的letter屬性是否爲(或不爲)。

正如一個建議,而不是使用char作爲類型,使用Character,這是封裝char類型的類。

你的類,那麼將可能會是這樣:

class Cell { 
    int column; 
    int row; 
    Character letter; 

    public Cell(int column, int row, Character letter) { 
     super(); 
     this.column = column; 
     this.row = row; 
     this.letter = letter; // This is an object, not a primitive type 
    } 

    public boolean isEmpty() { 
     if (letter==null) 
      return true; 
     else 
      return false; 
    } 
} 
0

this不能是null,因爲this是您的Cell的實例。 不改變charCharacter

class Cell { 
    int column; 
    int row; 
    char letter; 

    public Cell(int column, int row, char letter) { 
     super(); 
     this.column = column; 
     this.row = row; 
     this.letter = letter; 
    } 

    public boolean isEmpty() { 
     return letter == 0; 
    } 
}