Re: Collection, enum or something else?
Todd wrote:
Hello,
Suppose one has a class called Shrub that has well-defined behavior
and state. Now suppose one wants to create references (pardon the
loose wording, hopefully this will become clear shortly) to shrubs of
the world by continent.
I think you might be over complicating things. What's the matter with:
public class Shrub
{
String name;
String continent;
public Shrub( String name, String continent )
{
this.name = name;
this.continent = continent;
}
}
Then you just can just do this:
public class ShrubsOfTheWorld
{
Map<String,Shrub> byName = new HashMap<String,Shrub>();
Map<String,Shrub> byContinent = new TreeMap<String,Shrub>();
public void addShrub( Shrub s )
{
byName.put( s.name, s );
byContinent( s.continent, s );
}
}
Or something. I think you're over complicating things by using an enum,
for sure. There are probably not a finite list of shrubs that you want
to enumerate, and more will be discovered. My primary clue here was that
just a Shrub object was good enough inside your enum. If it is, then
you don't need the enum or a subclasse. "Prefer composition to
inheritance." And that's what I did. Rather than subclass or make an
enum, I just composed Shrug so that it had the property needed.
I guess an enum for the continents makes sense though. Unlikely that
any new continents will come along.
BTW I chose TreeMap because I think it will handle the large number of
collisions better that storing by continent will cause than a hash map
would. There's probably a better way to do this, I just did a quick
first pass at it.