最近,我有談話和我的朋友約的良好做法,以創造公共的API,我們吵了起來,當我們來到返回類型。他告訴我只返回Widen類型,例如列表insted ArrayList。但在我看來,這一切都取決於我們試圖解決的問題。 我看到沒有錯:窄或寬型?什麼在我的公開API返回
ArrayList foo();
當我想說:「嘿,我給你ArrayList的只是確保你長了訪問在O(1)時間元素」
在下面的例子讓我們假設有在方法簽名沒有inforamtion或關於返回什麼樣的圖形或使用什麼表示的文檔
Graph foo();
現在怎麼辦?基於鄰接表或鄰接矩陣,我可能想知道這個圖是有向還是無向的。什麼是最壞的情況可能會導致類似的代碼:
Graph graph = foo();
if(graph instanceof DirectedGraph)
//code
這是違反了里氏替換原則
你有什麼想法?
簡潔的答案。我會補充說_sometimes_ Java泛型在這種情況下很好(但顯然取決於域/上下文)。 –