2015-05-03 52 views
3

我使用Java 1.7.0_79試驗構造函數返回一個有效的參考

在問題的代碼是這樣的,我實例化一個新的對象,我想檢查對象具有有效的參考構造函數返回後,我檢查,看它是否爲空:

mClientConnection = null; 
mClientConnection = new XMPPTCPConnection(configBuilder.build()); 
if(mClientConnection == null) { 
    return false; 
} 

的構造函數實現包含此:

public XMPPTCPConnection(XMPPTCPConnectionConfiguration config) { 
    super(config); 
    this.config = config; 
} 

我想知道我怎麼能檢查mClientConnectio n包含有效的引用?

我使用FindBugs的,我得到這個報告的錯誤:

This method contains a redundant check of a known non-null value against the constant null

+0

http://stackoverflow.com/questions/11103444/java-can-creating-an-object-return-a-null-reference - 你正在嘗試測試不可能發生的事情。 – Mat

回答

3

這並不是說返回新創建的對象的構造。構造函數不返回任何內容 - 它沒有返回類型,也沒有return聲明。

當您使用new運算符創建新對象時,Java運行時環境將爲對象分配內存,並通過調用相應的構造函數來初始化它。 new運算符然後返回對象的引用 - 而不是構造函數。

new操作不會返回null,所以這是從來沒有要檢查是否使用new之後引用是null

3

警告FindBugs的是正確的,因爲構造函數永遠不能返回null。 在最壞的情況下,它可能會拋出一個異常,但它不會到達檢查null的最後一行。

2

如果你想測試有效性,你需要添加一個方法來做到這一點。

mClientConnection = new XMPPTCPConnection(configBuilder.build()); 
if (!mClientConnection.isValid()) 
    return false; 

什麼使組件有效取決於它是什麼和做什麼,你可以在方法中寫入它。

一旦您設置一個new對象的變量的值,你可以認爲它沒有null(除非你是在另一個線程將它設置爲null