Hi Thomaz, Wouldn't that be the exact same thing as testing against the interface references that's stored which each analyzer (as I suggested in my post) ?
Since there is no compile-time way to check this, i'm going to check all the items with all the analyzers in the analyze() method and give a runtime error if something's wrong. Thanks for thinking with me though! :) On Sun, Mar 23, 2008 at 2:29 AM, Andrei Thomaz <[EMAIL PROTECTED]> wrote: > and if each IAnalyzer implements a function called getAnalyzedProperty(), > returning a string, and if each item (using an IItem interface, for > example) > implements a function called hasProperty(), receiving a string as > parameter? > So, you could check if the item has the "getProperty()" function the > analyzer requires, at runtime, without having runtine errors... You could > also have some getProperty( strProperty:String ):Object function, defined > at > IItem interface. > > interface IAnalyzer > { > getAnalyzedProperty():String; > } > > interface IItem > { > hasProperty( strProperty:String ):Boolean; > getProperty( strProperty:String ):Object; > } > > > just a guess, > andrei > > > > On Sat, Mar 22, 2008 at 11:39 AM, Jeroen Beckers <[EMAIL PROTECTED]> > wrote: > > > Hi list! > > > > Situation: I have a class that analyzes stuff. There are different > > analyzing > > classes, such as "HeightAnalyzer", "WeightAnalyzer", "LevelAnalyzer", > etc. > > You can add an analyzer to the class by using > > 'myClass.addAnalyzer(newAnalyzer:IAnalyzer)'. > > As you can see, there is an IAnalyzer interface which all Analyzer's > > implement. Every time you add an analyzer, it is added to the list using > > the > > Decorator pattern. (Every analyzer must analyze a list and pass it to > the > > next analyzing test) > > > > Now, the analyzer's analyze certain items. Every analyzer requires the > > analyzed item to have a certain set of methods. The HeightAnalyzer > > requires > > a getHeight(), the LevelAnaylzer requires a getLevel(), etc. I want to > > have > > a different interface for each analyzer, so that I can easily add > > analyzers > > (+interfaces). > > > > If I want to analyze a list of items, those items must implement the > > correct > > interface, according to which analyzers you have added to the class. Fe: > > > > var myClass:AnalyzerBundle = new AnalyzerBundle(); > > myClass.addAnalyzer(new HeightAnalyzer()); > > myClass.addAnalyzer(new LevelAnalyzer()); > > myClass.analyze(new Array(item1, item2, item3)); > > > > What I am looking for now, is a way to make sure that item1, item2 and > > item3 > > all implement the IHeightItem and ILevelItem interfaces. > > > > I've found a couple of ways to do this, but none of them seemed really > > good > > to me. One of them was to have every Analyzer keep track of the > interface > > associated with it, and check if they implement the correct interface, > > once > > the analyzer is called. But this would give ugly runtime errors... > > I'm pretty sure that it can't be done at compile time, but if anyone > > happens > > to know some way (hack), or a better way for the runtime errors, please > > tell > > me :-). All ideas are welcome > > > > Ps: I've just made up all these names, my question is about the > technique > > to > > be used, not about the project :) > > _______________________________________________ > > Flashcoders mailing list > > Flashcoders@chattyfig.figleaf.com > > http://chattyfig.figleaf.com/mailman/listinfo/flashcoders > > > _______________________________________________ > Flashcoders mailing list > Flashcoders@chattyfig.figleaf.com > http://chattyfig.figleaf.com/mailman/listinfo/flashcoders > _______________________________________________ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders