Re: Make this 'generic'
Sandy wrote:
I am storing objects of type Feat in the sample code. I have to also
store objects of type Modifier and in another place type Language.
Each time I used this generic vector manager class I would have a
different type of object in the vector, but each object in that vector
would always be the same type as all of the other objects in the
vector.
I MIGHT be able to do this with type Object, but if I do, will my
checking to see if they are duplicates work? Currently I cast things
in and out. If I tried to access the equals method without casting the
Object to a 'known' type I assume it will break.
I wouldn't write a new class for this. I would use three different
collections, like this:
Set <Feat> feats = new HashSet <Feat> ();
Set <Modifier> modifiers = new HashSet <Modifier> ();
Set <Language> languages = new HashSet <Language> ();
A Set cannot, by its very nature, have duplicates, so no need to check for
that any more.
No casting needed - each Set uses its generic base type to know which
"equals()" and "hashCode()" to invoke.
So when you want to add a particular Language object to the Set:
languages.add( new Language( "French", "fr", new Locale( "fr" ) ) );
If you want to do something to every Feat in feats you can do this:
for( Feat feat : feats )
{
feat.doYourStuff();
moveThose( feat );
}
If you want to look up something by its name, you can use a
Map <String, Feat> featMap;
Map <String, Modifier> modifierMap;
Map <String, Language> languageMap;
..
Then you could use expressions like
Language french = languageMap.get( "fr" );
-- Lew