2015-05-20 73 views
0

我使用了一个Vaadin表格对象,它运行良好(没有任何表现,它在浏览器中看起来没事)。Vaadin表对象返回null,尽管它存在 - 修改toString()?

但是,当我检查!= null或只是打印到控制台它实际上返回null而不是ID/hashCode,虽然它已初始化和工作。

在test.java

Table table = new Table(); 
System.out.println("table: " + table); 

控制台输出:

>> table: null 

我想出的是,表Vaadin类覆盖正常的Java的toString()反对一种alignemt的(这是这里默认为null)。所以它不会像通常那样返回一个hexcode(至少我猜是这样!)。

我的问题是:如何修复这种行为,以便我可以编写适当的相似度测试和!= null? 是否有hexCode方法不会干扰其他/标准Java对象代码?

+0

你是什么意思'写适当的测试相似性和!= null'? – Morfic

回答

1

您可以简单地使用Object.hashCode()或者如果你真的需要使用toString你可以覆盖它:

Table table = new Table(){ 
    final Long hexcode = new java.util.Random().nextLong(); 
     @Override 
     public String toString(){ 
      return hexcode.toString(); 
     } 
    }; 
    System.out.println("table: " + table); 
1

从tostring方法变为十六进制代码是不正常的。 toString方法是创建一个代表对象的字符串。如果你这样做:

if(table != null) 

toString方法将不会被调用。 Java只检查变量中是否存在名为“table”的对象。如果你想检查表是否为空,你应该使用方法isEmpty。如果你想要一个对象,这被称为哈希码的十六进制编码,你应该使用这种方法:hashCode()

更多信息以toStringhashCodehttps://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode() https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString()