Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #9078

Enum mixin?

From "A. W. Dunstan" <no@spam.thanks>
Organization OptiMetrics, Inc.
Date 2011-10-21 17:19 -0400
Newsgroups comp.lang.java.programmer
Subject Enum mixin?
Followup-To comp.lang.java.programmer
Message-ID <WsudnUpWT_V6fDzTnZ2dnUVZ_vCdnZ2d@speakeasy.net> (permalink)

Followups directed to: comp.lang.java.programmer

Show all headers | View raw


I'm writing a GUI that's a wrapper around some Fortran code.  In one of the 
Fortran routines I pass in an integer that tells the Fortran code what kind 
of 'cloud model' to use (it's a big physics simulation).  For example:

value   meaning
-----   ---------
0       no clouds
1       cumulus
2       altostratus
18      cirrus

etc.  The Fortran is 3'rd party software so changing values & their meanings 
isn't an option.

I'd use a plain enum but the values passed in aren't continuous (as above - 
it skips from 2 up to 18), nor do they necessarily start at zero.  So I 
wrote my own enum where I could associate a name, a value and a description:

public enum CloudModel {
	None(0, "No clouds"),
	Cumulus(1, "Cumulus"),
	AltoStratus(2, "Altostratus"),
	Cirrus(18, "Cirrus");

	CloudModel(int value, String description)
	{
		m_value = value;
		m_desc = description;
	}

	public int getValue() { return m_value; }

	public String toString() { return "" + m_value + ": " + m_desc; }

	private int m_value;
	private String m_desc;
}


This works but I'm now up to six different enums (Cloud coverage, 
atmospheric model, haze, surface reflectance, etc), and they all look nearly 
the same.  Each one has identical getValue() and toString() methods, m_value 
and m_desc.  And the constructor varies only in it's name - the body of each 
constructor is the same.  Creating a new enum is easy - cut & paste, change 
the name of the constructor, type in the values and I'm done.

This works too, but code reuse by cut-and-paste worries me.  I'd like to 
extract the methods & member variables into a base class of some sort and 
extend that, providing the enumeration values in each derived enum.  BUT - I 
can't extend from an enum.  If I could put the common parts in a separate 
class and mix that in (as in Ruby) that'd be great, but Java isn't Ruby.

My code will be called from Matlab (which can access Java objects & methods 
directly) so I'd like to keep it as an enum.  And enums are easy to load 
into a JComboBox, which makes that part of the GUI code cleaner.

I'm ok with leaving it the way it is, but does anyone know of a better 
approach?  Preferably one that's not so complex that it's worse than my 
current state of affairs?


-- 
Al Dunstan, Software Engineer
OptiMetrics, Inc.
3115 Professional Drive
Ann Arbor, MI  48104-5131

"There are two ways of constructing a software design.  One way is to
make it so simple that there are obviously no deficiencies.  And the
other way is to make it so complicated that there are no obvious
deficiencies."
            - C. A. R. Hoare

Back to comp.lang.java.programmer | Previous | NextNext in thread | Find similar


Thread

Enum mixin? "A. W. Dunstan" <no@spam.thanks> - 2011-10-21 17:19 -0400
  Re: Enum mixin? Robert Klemme <shortcutter@googlemail.com> - 2011-10-21 23:37 +0200
    Re: Enum mixin? markspace <-@.> - 2011-10-21 16:16 -0700
      Re: Enum mixin? Robert Klemme <shortcutter@googlemail.com> - 2011-10-23 11:44 +0200
        Re: Enum mixin? Lew <lewbloch@gmail.com> - 2011-10-23 08:45 -0700
    Re: Enum mixin? "A. W. Dunstan" <no@spam.thanks> - 2011-10-24 09:23 -0400
  Re: Enum mixin? Roedy Green <see_website@mindprod.com.invalid> - 2011-10-22 18:10 -0700

csiph-web