Java org.w3c.dom庫的作者選擇不支持Iterable接口的原因是否有任何理由?例如,界面NodeList看起來非常適合擴展Iterable。org.w3c.dom.NodeList不擴展Iterable
回答
萬維網聯盟定義了Document Object Model (DOM)如下:
文檔對象模型是一個平臺和語言無關的 接口,它允許程序和腳本動態訪問 和更新文件的內容,結構和風格。
很多語言的實現看起來非常相似,聰明的人認爲這是一個好主意,很多年前他們設計的時候。因此,它看起來不像任何語言中熟悉的任何東西。
如果要使用看起來像Java庫的w3c DOM的替代方法,請使用JDOM。或映射你的XML到Java對象使用映射/約束力的解決方案,如JAXB
但是如果你需要與已經使用W3C DOM(如內置XSLT和XSD處理器)現有的庫的接口,那麼你」重新卡住它。不幸。
要@eis:
是有,你不能添加一個接口,如Iterable
到NodeList
一個原因,那原因是Java的文檔對象模型的結合中被定義the standard。取NodeList
,標準中定義爲100%。沒有空間用於任何額外的接口。
組織/ W3C/DOM/NodeList.java:
package org.w3c.dom;
public interface NodeList {
public Node item(int index);
public int getLength();
}
有在C#標準沒有約束力,但有一個爲EcmaScript的。我相信你提到的IXMLDocument接口也可以用於他們的EcmaScript實現(但我可能是錯的),在這種情況下,他們仍然需要堅持標準的方法支持哪些方法以及類型層次結構。
不同之處在於EcmaScript綁定只描述應該存在哪些方法,而Java綁定則描述接口中的確切方法。 儘管在Java中沒有理由實現NodeList
的類也不能實現Iterable
。但是,如果您的代碼依賴於它不適用於DOM標準,但僅適用於特定的實現。
微軟從來沒有真正困擾過這種美好的區別,因爲他們通常不會滿足多標準兼容的實現 - 如果您使用任何Microsoft標記的方法「*表示擴展到萬維網聯盟W3C)DOM。「在微軟的實現中,那麼你並沒有使用DOM標準。
我不認爲DOM是與語言無關的接口,與java接口org.w3c.dom庫實現的事實有關。例如,Microsoftofts MSXML DOM具有[IXMLDOMDocument](http://msdn.microsoft.com/en-us/library/windows/desktop/dd892951%28v=vs.85%29.aspx),[IXMLDOMDocument2](http: //msdn.microsoft.com/en-us/library/ms761358%28v=vs.85%29.aspx)和[IXMLDOMDocument3](http://msdn.microsoft.com/en-us/library/ms763789%28v = vs.85%29.aspx)接口互補,並添加擴展到DOM規範。 – eis
簡而言之:AFAIK規範沒有強制要求Java以類似的方式在org.w3c.dom中添加Iterable等Java特定接口。 – eis
@eis新增了我對 –
- 1. Iterable <?擴展iface_class>
- 2. 擴展Iterable的Haxe接口
- 3. 將「pimp my Iterable」擴展爲選項
- 4. 擴展集合時,如何在'this'上使用Iterable?
- 5. 如何轉換Iterator <?將Person>擴展爲Iterable?
- 6. div不擴展表擴展,或div不擴展當它擴大
- 7. 添加節點到org.w3c.dom.NodeList
- 8. Angular2 - PrimeNG dataTable行擴展不擴展
- 9. CollapsiblePanelExtender不擴展
- 10. .rowconfigure不擴展?
- 11. 不擴展React.Component
- 12. 不擴展NSScroller
- 13. CSS不擴展
- 14. 如何讓Java Iterable返回基類擴展通用的子類型
- 15. 在實現可擴展Iterable的接口的java類中等於實現?
- 16. Tk :: MListbox不擴展
- 17. 不能在擴展
- 18. 寬度不擴展?
- 19. ImmutableList不擴展List?
- 20. Primefaces TreeNode不擴展
- 21. Expandable ListView不擴展
- 22. 不能擴展類
- 23. Snipmate不再擴展
- 24. 不同的擴展
- 25. 擴展擴展類型
- 26. Chrome擴展圖標://擴展/
- 27. 擴展擴展管理器
- 28. 擴展擴展類Zend_Db_Table_Row_Abstract
- 29. jQuery:如何擴展擴展?
- 30. 訪問擴展://擴展
剛纔問我同樣的問題,org.w3c.dom出現在JDK 1.4和JDK 1.2中的迭代器中。簡單的答案是,Java綁定的W3C規範再次由某人從未編碼過(用Java編寫)。 事實上NodeList是不可迭代的,並且沒有遵循任何約定(getLength !!是什麼)真的是一個巨大的痛苦。 – Julien