2012-01-20 58 views
2

可能重複:
Method Overloading for NULL parameter重載的構造不同的對象參數

關於Java編碼時, 「最佳實踐」 快問。我有一個可以用兩種不同類型的對象構建的類(一個HashMap或一個獨立的類,我稱之爲SearchTerm)。在客戶端通過構造函數給出一個空參數的情況下,我通常會有相當不錯的處理程序,但是如果發生這種情況,虛擬機會崩潰並說這個參數是不明確的。 (這是有道理的,因爲null參數可能是指任何一個對象。)

這些情況通常如何處理?允許單獨的對象作爲參數是不好的形式嗎?

+3

這是一個編譯器錯誤。有什麼問題? – SLaks

+0

VM應該根據參數類型處理要調用哪個構造函數。 – Will

+1

@WilliamVanRensselaer - 但事實並非如此。薩爾,你可以使用工廠來構造這些對象,並讓工廠拒絕參數爲空的情況嗎?或者,如果空案例有效,則使用第三個構造函數,其中一個參數少於工廠使用的參數。 –

回答

4

除非我誤解了某些東西,否則只有當您嘗試以null作爲參數調用構造函數時纔會發生此歧義錯誤。如果要解決這個問題,你可以投的參數要使用,像這樣的類:

new YourClass((SearchTerm) null); 

這樣編譯器知道,即使論據是null,它應該像對待一個nullSearchTerm的實例。

如果出現這種情況是空的SearchTerm一個實例,不應該有一個問題:

SearchTerm searchTerm = null; 
new YourClass(searchTerm); 

應該毫不含糊的錯誤工作,因爲編譯器知道什麼類型的實例,即使它是空的。

相關問題