讓我們說我有以下類別:添加到一套通用的傳遞給方法
- 動物
- 貓
- 狗
- 牛
動物是基礎類,貓,狗和牛每個子類。
我現在有一個Set<Cat>
,Set<Dog>
和Set<Cow>
每一種以相同的方式被使用,因此是很有意義做一個泛型函數來對它們進行操作:
private boolean addObject(Animal toAdd, Animal defVal, Set<? extends Animal> vals)
這個偉大的工程,我能自由通過我的套裝沒有問題。
問題出現:我無法嘗試添加Animal添加到參數值。谷歌搜索顯示,如果我改變閱讀方法:
private boolean addObject(Animal toAdd, Animal defVal, Set<? super Animal> vals)
我將能夠將動物添加到參數vals。這個工作,除了現在,我不能通過我的子集,我的套貓,狗,和奶牛。進一步的研究告訴我下面的作品,沒有警告啓動:
private <T> boolean addObject(T toAdd, T defVal, Set<? super T> vals)
的問題是,我需要能夠執行方法調用該動物的都有。
((Animal)toAdd).getAnimalType()
有沒有解決這個問題的任何辦法,所以我可以保持通用功能,並且不需要鑄造:這是很容易圍繞用一個簡單的投得到?除了在這個例子中設置所有基本類型的集合,動物?
*有沒有一種方法可以在不使用html代碼的情況下使用<>?* =>是的,請參閱我的編輯。你很少需要在SO上使用html。 – assylias 2013-03-08 11:57:25
+1對於您以前的研究。不幸的是,在這個網站上這是一件罕見的事情。 – 2013-03-08 11:59:06
@assylias謝謝你。現在,如果我只記得下次我需要提問時。 – Legowaffles 2013-03-08 12:05:07