Re: Initializing a Map in an Interface?
Rhino wrote:
I remember being told that an Interface containing only constants was
a good (or at least reasonable) idea on this same newsgroup some years
Bad advice.
ago.... Then again, as you say, the Java Community has gradually
evolved better ways of doing things. I have been away from Java for
several years and things have obviously evolved in my absence. I need
to play some catchup now.
Eric Sosman wrote:
You must have been away quite a while. Bloch recommended
against constant-only interfaces in the first edition of "Effective
Java," copyright 2001.
<http://java.sun.com/docs/books/effective/>
2nd ed.: "Item 19: Use interfaces only to define types"
He calls it the constant interface pattern, but you'll see it in the
literature as the "Constant Interface Antipattern".
One extremely important insight from this chapter is the focus on types. Java
programming with types rides the synergy of interfaces and generics to build
solid code.
From the world of types, it makes perfect sense that interfaces not hold the
kind of Map you describe. That there's a Map in there makes no difference to
the kind of type you need, an immutable set of particular colors with
associated names over which one can search or correlate by or to names. The
difference is in the behaviors and characteristics of that structure, much as
Eric and others have outlined.
From this thread I see that you can use an enum, a static immutable Map (in a
utility class!), an EnumMap, or whatever.
I showed an immutable Map approach upthread. I use the idiom frequently:
private static final Collection<T> stuff; // immutable
static
{
Collection<T> ffuts = // ... instantiate something appropriate
fillWithStuffToBeImmutable( ffuts );
// type T instances need to be immutable
stuff = Collections.unmodifiableCollection( ffuts );
}
and similarly for finer-grain types like List, or for Maps.
Rhino wrote:
What is a better way to keep persistent data
if an Interface is not the best way?
In a utility class.
Eric Sosman wrote:
"Persistent data" could mean a lot of different things, and
I don't know which you intend.
I guess from context they mean data that hangs around immutably.
Eric Sosman wrote:
There's more than one way to skin a cat. Which is a good
thing, because cats come in different sizes and ferocities ...
--
Lew