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?).