Josh - sorry to hear that. I was hoping you would be interested because this
is a nice way to implement your Enumeration pattern once and reuse the
implementation.

I have nothing against the enum facility in Java 1.5, but don't want to have
to keep re-implementing serialization and property support. Hope you'll
reconsider.

Thanks,
- John

On 6/23/06, Joshua Bloch <[EMAIL PROTECTED]> wrote:

John,

I am not interested in this.  It doesn't appear to play well with Java's
current enum facility, which has shown itself to work very well in practice.

      Josh


On 6/22/06, John Kaplan <[EMAIL PROTECTED]> wrote:
>
> Hello All,
>
> I've been working on a Java card playing program in my spare time, and I
> figured out something about Enumerations that may be of general use.
>
> The issue is if you are working with concepts like card ranks and suits
> in a non-trivial application, you want them to be comparable, serializable,
> and have their visual aspects defined in properties, not code. In the
> classic Enumeration pattern, you would re-implement the methods needed to do
> this stuff for each class, along with iterators and lookup methods.
>
> I figured out a way to code up an Enumeration base class that takes care
> of all the excise tasks for properties, serialization, hashing, comparing,
> etc.. This class allows you to extend as many subclass enumerations as you
> want, and it automatically keeps all of the enumerations in their own name
> and number (ordinal) spaces with no runtime penalty.
>
> To extend the current implementation, you have to override 3 one-liner
> methods in your subclass (the constructor and methods to look up enumeration
> instances by name and ordinal). I think I can further simplify that with
> annotation processing so you only have to indicate if you want the default
> overrides or variations. Other possible enhancements include allowing
> injection of alternate serialization options or ordinal sizes. (It currently
> uses a byte-sized ordinal because most cases I could think of don't have
> hundreds of enumeration constants, but they often have need of conserving
> space in databases.)
>
> I also think there's a way with annotation processing to specify default
> properties in the class file without having to create/edit a separate
> properties file, and that may be generally useful outside of enumerations.
>
> So, any interest in being involved with a commons project for such a
> thing, or in using it if delivered? I am not sure of the number of
> committers required or the sponsorship/championship needed for such a small
> thing in the Commons, so any advice would be appreciated. I am willing to do
> all the coding, testing, and documentation if need be, or to share with
> anyone else interested in contributing according to Commons guidelines.
> Below is an example of a subclass.
>
> Thanks,
> - John
>
> public final class Suit extends Enumeration
> {
>     protected static final long serialVersionUID =
> Enumeration.serialVersionUID;
>
>     public static final Suit noSuit = new Suit( 0, "X" );
>     public static final Suit clubs = new Suit( 1, "C" );
>     public static final Suit diamonds = new Suit( 2, "D" );
>     public static final Suit hearts = new Suit( 3, "H" );
>     public static final Suit spades = new Suit( 4, "S" );
>
>     private Suit( int ordinal, String name  )
>     {
>         super( ordinal, name );
>     }
>
>     public static final Suit fromOrdinal( int ordinal )
>     {
>         return (Suit) noSuit.getFromOrdinal( ordinal  );
>     }
>
>     public static final Suit fromName( String name )
>     {
>         return (Suit) noSuit.getFromName( name );
>     }
> }
>
>

Reply via email to