(I'll use the terms property and metaproperty in this email as per the checked in CVS)
On the Joda project I created a subinterface and subclass for each basic type. Thus a StringProperty is a subinterface of Property that makes it specific to a String. It adds a lot of type safety, but is a bit of a pain. (Lots of classes in the API, lots to maintain, there's always a class not covered). However, for Lists and Maps it works well to have subinterfaces. Thus I propose: Property - get() and set(Object) ListProperty - extends List MapProperty - extends Map (This is instead of IndexedAttributeAccessor/MappedAttributeAccessor) The trick is to re-use the List and Map interfaces, rather than redefining our own pale imitations using a few add/set/remove methods. In java reflection the code is field.get(Object instance) For the MetaProperty concept I would change this to: metaProperty.getProperty(instance).get(); Thus the getProperty() method returns a suitable wrapper for that property for that instance. ie. it creates the delegate. Thus at the meta level, there is no need for specific List and Map subinterfaces. I think the key to all APIs like this is to re-use what Java offers, and thats the collections API in this case. Stephen -- To unsubscribe, e-mail: <mailto:commons-dev-unsubscribe@;jakarta.apache.org> For additional commands, e-mail: <mailto:commons-dev-help@;jakarta.apache.org>
