我創建了兩個Java接口Tree<T>
和BinarySearchTree<T extends Comparable<T>>
,其中第二個接口擴展了第一個接口。我有一個執行BinarySearchTree
,稱爲LinkedBinarySearchTree
。下面的代碼明顯抱怨在編譯時:在實現接口時擴展包含類型
Tree<Object> a = new LinkedBinarySearchTree<Object>();
因爲LinkedBinarySearchTree
實現了已經指定T
爲Comparable
類型的接口,並且Object
s爲不Comparable
。我完全理解這一點,並不構成我的實現問題。
我希望瞭解的是這種方法在實踐中是否會有危險。我無法想象這樣一種情況:從Tree
到BinarySearchTree
的數據類型的「縮小」會給我一個運行時錯誤(ClassCastException
,也許?),但我期待與更有知識的人員進行確認。從本質上來說,當擴展接口被認爲是不好的練習時,是「縮小」接口所持有的類型,如果是這樣,爲什麼?
不,這不是一個壞習慣。你可以通過不縮小類型來使你的BST更通用,並且要求Comparator作爲參數,就像TreeSet一樣。 –