[jdom-interest] suggested JDOM2 improvements
Thomas Scheffler
thomas.scheffler at uni-jena.de
Tue Jan 17 00:10:00 PST 2012
Hi,
first I want to thank all on working on JDOM2. While going over the
Javadocs I noticed some issues and got some ideas I want to share.
When creating a XPath instance, the instance should be unmodifiable, e.g.
remove setNamespace() methods and use
XPathFactory.newInstance().compile(String xpath, Namespace... namespaces)
One thing that is left then is variables and XPath instances should be
threadsafe then. One way to achieve this would be to create a
XPathVariable class and use var-args on selectNodes:
xPath.selectNodes(NamespaceAware context, XPathVariable... variables)
Then you can improve the XPathFactory on using a weak cache that always
returns the same instance. This would not only allow to share a XPath
instance across multiple threads but also decrease memory consumption.
----
What I would take into consideration is allow generics in XPath, e.g.
XPath<Element> test=XPath.newInstance("/foo/bar", SOME_ELEMENT_HINT);
XPath<Attribute> test2=XPath.newInstance("/foo/@bar", SOME_ATTRIBUTE_HINT);
Or if you do not want this, you can return <? extends NamespaceAware> by
default.
----
One other thing I noticed is the practice of making JDOMConstants an
interface. Usually interface means something like
if (o instanceof (JDOMConstants)){
((JDOMConstance)o).doSomething();
}
It would be "better" code to make JDOMConstants a final class with
private constructor and use "import static JDOMConstants.*" where you
need it. That would not result in such statements: "Element _is a_
JDOMConstants".
----
And before starting another mail, please count my vote on moving
ContentList into Element.
I'm really looking forward to JDOM2 release.
regards Thomas
--
Thomas Scheffler
Friedrich-Schiller-Universität Jena
Thüringer Universitäts- und Landesbibliothek
Bibliotheksplatz 2
07743 Jena
Phone: ++49 3641 940027
FAX: ++49 3641 940022
More information about the jdom-interest
mailing list