Many toolkits don't advertise their features (or lack thereof) very well, so selecting one that fits your needs can be a pretty frustrating experience. The table below compares a number of features across different toolkits. While it is accurate (to the best of my knowledge), it is probably also biased, as I am the author of one of the "competing" toolkits. I welcome all corrections, clarifications, and suggestions for other features to compare.
You can click on blue entries to get a popup with extra details. The JSR 175 column is blank for now since the specification is not yet public.
QDox Attributes v0.6 | JSR 175 | MetaClass | Nanning Attributes | Attrib4j | C# attributes | |
---|---|---|---|---|---|---|
String key/value attributes: | yes | yes | yes | no | no | |
Strongly typed object attributes: | yes | no | no | yes | yes | |
Attribute subtyping: | yes | n/a | n/a | ? | ? | |
Typed attribute serialization: | automatic or manual | n/a | n/a | manual | manual (?) | |
Positional or named parameters: | both | named or single | n/a | positional only | both | |
Complex parameters: | some | n/a | n/a | ? | no | |
Target restrictions: | not yet | possible | no | ? | yes | |
Multiple attributes with same tag on an element: | yes | yes | no | ? | yes | |
Keeps attributes in declaration order: | yes | yes | no | ? | no | |
Attribute inheritance: | not yet | ? | yes | yes | yes | |
Supports nested classes: | yes | yes | yes | ? | yes (?) | |
Early access to attributes: | yes | yes | no | no | no (?) | |
Attribute assignments can be modified at runtime: | no | yes | no | no | no (?) | |
Attributes can be modified at runtime: | yes | possible | ? | ? | yes (?) | |
Wildcard tag application: | not yet | possible | no | no | no | |
Attribute storage: | serialized in one separate file per class or one separate file per JAR | raw data in one separate file per class | text properties in one separate file per class | serialized within the class file | serialized within the assembly file | |
Prunes orphan attribute files: | yes | ? | no | yes | yes | |
Retention policy: | storage, not yet retrieval | storage only | none | ? | none | |
Attribute compilation speed: | fast | fast | fast | slow | very fast | |
Runtime performance: | ? | ? | ? | ? | fast | |
Runtime code size: | 14Kb optimized and as delivered | 35Kb as delivered, 17Kb optimized | ~140Kb | 530Kb as delivered | n/a | |
Ant task: | not yet | yes | yes | yes (?) | n/a | |
Eclipse incremental compiler plugin: | not yet | no | no | not yet (?) | n/a | |
Unit test coverage: | some | good | a bit | ? | n/a | |
JDK version required: | 1.4 | 1.5 (?) | 1.3+ | ? | ? | n/a |
Other attributes projects: Apache Commons Attributes (abandoned), XRAI (based on XDoclet, not released yet?).