好吧,我正在使用抽象類A進行項目工作。假設類a1,a2和a3全部從類A繼承,並且有一些附加方法可能對每個方法都是唯一的子類。現在,這些對象可以作爲用戶交互的結果與其他對象配對,但只有某些類型的對象可以配對,即對象B只能使用a1,對象C只能使用a2,並且用戶嘗試否則結果告訴他們他們不能。我當然希望避免使用instanceof,因爲這在很大程度上是不好的做法,但我認爲目前我有一個相當討厭的腦脹氣病例。我想在父類中添加一個getType()或者一些這樣的方法來返回一個對每個子類都唯一的字符串,但是這會讓人覺得陳腐。抓住班級名稱感覺非常相似。我對OO和多態原則有點生疏,所以我們歡迎提供建議。繼承和識別Java中的對象類型
1
A
回答
0
我正在考慮在這種情況下使用泛型的解決方案。
要做到這一點,你需要定義存儲兩個值genericly像類
類對< K,V擴展A>
現在你會被添加到一個HashMap的所有類型對你可以有。當需要一對這種類型的時候,你會得到它的名字。
缺點:
你要添加到容器都希望對
你有一個名字相關聯的一對
注意,在一個巨大的規模,這將是一個壞的解決方案。
2
如果您真的不想使用instanceof,並且無論如何不能爲任何原因定義超出實例類的配對參數,請向抽象類添加一組設置新方法,以執行其中一個東西:
a)方法worksWithTypeB,worksWithTypeC等等,在適當的子類中定義它們。然而,這很像類型檢查。
b)將類型B和C將使用的方法傳遞給抽象類;通常在B和C可以使用的類中定義它們(假設B類使用a1.methodB,而C類使用a2.methodC),但是將它們定義爲拋出一個異常否則存在(所以a1.methodC拋出一個異常,就像a2.methodB一樣)。
雖然ilcavero說,在這種情況下,類型檢查沒有任何問題。
相關問題
- 1. Java對象類和多繼承
- 2. JAVA:泛型類繼承和泛型類型繼承
- 3. 繼承Java中的對象類
- 4. 反射中未識別的Java繼承
- 5. 識別聯合和繼承
- 6. 類,對象,繼承?
- 7. Python子類不識別繼承父類
- 8. 的Java類型轉換和繼承
- 9. Java:新的繼承和對象編號
- 10. Python的 '對象' 型和繼承
- 11. java類繼承和javabean繼承之間有什麼區別?
- 12. 爲什麼繼承對象類型
- 13. 如何從繼承類型的對象中獲取BaseType類型的對象?
- 14. JavaScript繼承。從另一個類繼承的對象和方法
- 15. Java繼承返回類型
- 16. Rails無法識別繼承類方法
- 17. 檢查對象類型是否繼承抽象類型
- 18. 原型對象繼承
- 19. 泛型類型和繼承
- 20. 繼承和泛型類型
- 21. java對象和繼承數組
- 22. Java對象,繼承和接口
- 23. Javascript原型繼承和對象創建
- 24. javascript原型繼承和對象屬性
- 25. WCF和對象的繼承
- 26. Java類繼承和比較子類對象
- 27. 在JavaScript中繼承對象中的類
- 28. 驗證java中的值對象(繼承)
- 29. 繼承Django模型中的python對象
- 30. 我的對象類繼承武器類和護甲類的繼承關係
在這種情況下,我看不到任何使用instanceof的問題,當您在運行時使用它來檢查類型時,它被認爲是一種不好的做法,應該在編譯時檢查它們,但是您說它是用戶將做配對(因此運行時操作),所以instanceof似乎是一個不錯的選擇 – ilcavero