2
關於Java編碼時, 「最佳實踐」 快問。我有一個可以用兩種不同類型的對象構建的類(一個HashMap或一個獨立的類,我稱之爲SearchTerm)。在客戶端通過構造函數給出一個空參數的情況下,我通常會有相當不錯的處理程序,但是如果發生這種情況,虛擬機會崩潰並說這個參數是不明確的。 (這是有道理的,因爲null參數可能是指任何一個對象。)
這些情況通常如何處理?允許單獨的對象作爲參數是不好的形式嗎?
關於Java編碼時, 「最佳實踐」 快問。我有一個可以用兩種不同類型的對象構建的類(一個HashMap或一個獨立的類,我稱之爲SearchTerm)。在客戶端通過構造函數給出一個空參數的情況下,我通常會有相當不錯的處理程序,但是如果發生這種情況,虛擬機會崩潰並說這個參數是不明確的。 (這是有道理的,因爲null參數可能是指任何一個對象。)
這些情況通常如何處理?允許單獨的對象作爲參數是不好的形式嗎?
除非我誤解了某些東西,否則只有當您嘗試以null
作爲參數調用構造函數時纔會發生此歧義錯誤。如果要解決這個問題,你可以投的參數要使用,像這樣的類:
new YourClass((SearchTerm) null);
這樣編譯器知道,即使論據是null
,它應該像對待一個null
SearchTerm
的實例。
如果出現這種情況是空的SearchTerm
一個實例,不應該有一個問題:
SearchTerm searchTerm = null;
new YourClass(searchTerm);
應該毫不含糊的錯誤工作,因爲編譯器知道什麼類型的實例,即使它是空的。
這是一個編譯器錯誤。有什麼問題? – SLaks
VM應該根據參數類型處理要調用哪個構造函數。 – Will
@WilliamVanRensselaer - 但事實並非如此。薩爾,你可以使用工廠來構造這些對象,並讓工廠拒絕參數爲空的情況嗎?或者,如果空案例有效,則使用第三個構造函數,其中一個參數少於工廠使用的參數。 –