--- Finn Bock <[EMAIL PROTECTED]> wrote: > [Glen Mazza] > > > Could you explain why we have the datatypes > instances > > to begin with--what they're for? I'm not sure > what > > their precise purpose is. > > The datatypes are the slightly more complex property > values. The > property classes wraps the datatype in order to give > the datatypes a > common interface. >
Thanks for taking the time to explain this. My comprehension has increased quite a bit. > > Some of the concrete property subclasses wraps > standard java types such > as int, char, String, Number and Vector and for > these properties we > still need a wrapper. But some of them, marked with > (*), wraps a > datatype which is under our own control and for > those properties, the > datatype class could also function as the property > wrapper. > I now understand what you're saying, and like the simplification you're suggesting. The current naming however, is probably preferable--the word "Property" figures quite highly in the spec! Do you have a problem remaining with it? For those (*)'ed datatypes, can't we get rid of the datatype instead by rolling that datatype into the equivalently named Property? In turn, have *those* Properties extend AbstractProperty as you suggest. Actually, I guess I'm just saying the same thing you're suggesting, except to use "--Property" instead of "--Type" for everything. > > Offhand, it's doesn't seem natural to go without > > Property objects--they are kept in the > PropertyList > > and indexed by the property ID in that list. > > That would still be the case. Everything stored in > the PropertyList > implements the Property interface. But only a few of them would extend AbstractProperty, correct--or would you plan on having all do so? > I remember two cases, but I can only find one at the > moment: In > Title.setup(): > > prop = > this.propertyList.get(PR_BASELINE_SHIFT); > if (prop instanceof LengthProperty) { > Length bShift = prop.getLength(); > } else if (prop instanceof EnumProperty) { > int bShift = prop.getEnum(); > } > > This would stay the same, except LengthProperty > would be called > LengthType and EnumProperty would be called > EnumType. Except that the > code above should IMHO use "if (prop.getLength() != > null)" to test for a > length type instead of using instanceof. > Well, instanceof is slower I believe, but better self-commenting. If you switch to this type of conditional for speed, just add a short comment of its purpose--here, to determine if we are working with an EnumProperty or a LengthProperty. (Another option, BTW, if you think it will cut down on buggy programming, is to have the classes implementing this Property interface supply unsupported interface methods a la Peter's Read-Only BitSet[1], i.e., throw exceptions. We can revisit this topic later if code errors are becoming a problem.) Thanks, Glen [1] http://cvs.apache.org/viewcvs.cgi/*checkout*/xml-fop/src/java/org/apache/fop/datastructs/Attic/ROBitSet.java?content-type=text%2Fplain&rev=1.1.2.2 __________________________________ Do you Yahoo!? Yahoo! SiteBuilder - Free web site building tool. Try it! http://webhosting.yahoo.com/ps/sb/