2015-05-20 70 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()