2013-04-04 66 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; 
    } 
}