回答
爲了上帝的緣故!決不!
你已經有了你需要的方法的接口,你不想實例化它們,沒有理由。事實上,(幾乎)從來沒有理由使用instanceof:D。
我的意思是我同意'instanceOf'的使用應該是不鼓勵的,但有些情況下需要使用它,就像你從外部源接收一個對象,它可能在網絡上或從磁盤讀取,以知道類型在運行時,應該使用'instanceOf'。 –
我特別要求在對象是數組元素的情況下。該數組可以有不同類型的不同元素,所以當循環播放它們時,我怎麼知道調用接口方法是安全的 –
我同意@MartyWallace如果一個人不確定typeof元素,可能需要知道instanceOf排列 – abnvp
這個好/壞?
不好:)但如果你只有一個數組,你沒有別的辦法。但我會建議實施一個存儲與封裝的許多不同陣列:
public class Field {
private Shape[] shapes = ...
private Circle[] circles = ...
private Rectangle[] rectangles = ...
public void addCircle(Circle c) {
shapes[...] = c;
circles[...] = c;
}
public Shape[] getShapes() {
return shapes;
}
public Circle[] getCircles() {
return circles;
}
}
...
field.getShapes(n).draw(); // for both Circle and Rectangle available
int radius = field.getCircles(m).getRadius()); // for Circle only
- 1. 我是否應該始終使用泛型?
- 2. Bootstrap layout - 我們是否應該始終使用XS col類
- 3. 我是否應該始終調用TcpClient.EndConnect(即使連接失敗?)
- 4. 我們是否應該始終在特質中使用`override`
- 5. 我們是否應該始終設置驗證組
- 6. 我應該始終初始化視圖模型對象嗎?
- 7. HTML5文章或主要元素 - 是否應該始終使用?
- 8. 核心數據應該僅用於特定類型的數據模型還是可以始終使用?
- 9. 我是否應該始終使用最新版本的Google Play服務?
- 10. 我們應該或不應該在模型中使用參數?
- 11. 檢查整個數組是否爲instanceof
- 12. 我是否應該始終使用C++初始化類中的每個數據成員?
- 13. 應該karma.conf.js始終位於
- 14. XMLHttpRequest是否始終可用?
- 15. 我是否應該開始使用Windows Azure
- 16. 我應該在HTML5中始終使用UTF-8嗎?
- 17. 我是否應該將實體對象類始終稱爲DAL或者我可以使用它的類?
- 18. 該應用程序始終開始
- 19. 我應該使用什麼模型?
- 20. 我們是否應該始終保留JavaScript內置對象方法的副本?
- 21. 我該如何模擬`instanceof`測試?
- 22. 是否應該始終加載域實體?
- 23. 我是否應該使用document.createDocumentFragment或document.createElement
- 24. 我是否應該使用NuGet
- 25. 我是否應該使用CanCan和Devise?
- 26. 即使超出範圍,我是否應始終關閉CachedRowSet?
- 27. SOAP/JMS是否應該始終處理錯誤?
- 28. 是否應該將主鍵始終添加到innodb表中?
- 29. 是否link_to始終使用GET和button_to始終POST?
- 30. 我是否應該在均勻轉換後始終對點進行歸一化?
你爲什麼要調用instanceof?多態性的要點是能夠在不知道和關心其具體類型的情況下調用對象上的方法。它實現了界面,這就是你需要知道的一切。 –
,因爲它們在一個數組中,並且數組中的元素可以是不同的類型 –
它們都是相同的類型:它們都實現的接口。在Foo []數組中,每個元素都是Foo。有些可能是FooImpl1的實例,還有一些是FooImpl2的實例,但它們都是Foo。這就是所有你需要知道的調用在Foo中聲明的方法。 –