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


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

use case for extending enum, but this is not possible in java

From Laura Schmidt <ls@mailinator.com>
Newsgroups comp.lang.java.programmer
Subject use case for extending enum, but this is not possible in java
Date 2014-06-15 01:24 +0200
Organization (posted via) M-net Telekommunikations GmbH
Message-ID <lniljr$8h9$1@news.m-online.net> (permalink)

Show all headers | View raw


Hi,

I have found a need to extend enum, but this is not possible in java. 
Take a look at the situation:

In an application, there is an enum ListCommand that enumerates the 
commands a user may execute on list entries:

public enum ListCommand
{
  OPEN,
  EDIT,
  DELETE;
}

There is an interface that uses this enum:

public interface ListCommandProcessor
{
  void onListCommand (ListCommand cmd);
}

And there is a generic Listing class that is used to show customized 
lists in the GUI and which uses the above interface:

public class Listing<T>
{
  ...
  ListCommandProcessor processor;
  ...
}

So far, so good.

Now I am making a cut: The generic class Listing<T> should be moved into 
a generic java library, so that it can be used by different 
applications. So I also need to move the interface ListCommandProcesor 
into this library, and this would implicate that I also move the enum 
ListCommand into the library. But the enum ListCommand ist application 
specific. If I move it to the library, it must be extendable somehow. If 
there were no limitations in the java language, I would separate the 
concerns of library and application like this:

--- library:

public enum ListCommand
{
  // empty at library level
}

public interface ListCommandProcessor
{
  void onListCommand (ListCommand cmd);
}

--- application:

public enum AppListCommand extends ListCommand
{
  OPEN,
  CLOSE,
  SOMETHINGSPECIAL;
}

public class MyApp extends ListCommandProcessor
{
  ...
  Listing<XYZ> listing = new Listing<XYZ> ();
  listing.setProcessor (this);

  public void onListCommand (ListCommand cmd)
  {
   AppListCommand c = (AppListCommand) cmd;

   switch (c)
   {
    ...
   }
  }
}

This would be my solution, but it is not possible in java to extend 
enums. But I need to make a cut somewhere in order to move Listing<T> 
into the generic library. The only solution I can imagine is to change

	onListCommand (ListCommand cmd);

into

	onListCommand (int cmd);

But then I would loose the beautiful type binding and I will soon find 
myself defining list commands like it was done in the 90's in C:

	public static final int CMD_OPEN = 1;
	public static final int CMD_EDIT = 2;
	public static final int CMD_DELETE = 3;
	public static final int CMD_SOMETHINGSPECIAL = 55;

I know that this would be a way out, but I want to make sure that there 
is no better solution.

How would you do this?

Thank you,
Laura

Back to comp.lang.java.programmer | Previous | Next — Next in thread | Find similar | Unroll thread


Thread

use case for extending enum, but this is not possible in java Laura Schmidt <ls@mailinator.com> - 2014-06-15 01:24 +0200
  Re: use case for extending enum, but this is not possible in java Steven Simpson <ss@domain.invalid> - 2014-06-15 01:04 +0100
  Re: use case for extending enum, but this is not possible in java Marcel Müller <news.5.maazl@spamgourmet.org> - 2014-06-15 02:53 +0200
  Re: use case for extending enum, but this is not possible in java markspace <markspace@nospam.nospam> - 2014-06-14 18:58 -0700
  Re: use case for extending enum, but this is not possible in java Robert Klemme <shortcutter@googlemail.com> - 2014-06-15 12:20 +0200
  Re: use case for extending enum, but this is not possible in java Robert Klemme <shortcutter@googlemail.com> - 2014-06-15 12:21 +0200
  Re: use case for extending enum, but this is not possible in java "Chris Uppal" <chris.uppal@metagnostic.REMOVE-THIS.org> - 2014-06-15 11:58 +0100
  Re: use case for extending enum, but this is not possible in java Wanja Gayk <brixomatic@yahoo.com> - 2014-06-16 01:08 +0200
  Re: use case for extending enum, but this is not possible in java Roedy Green <see_website@mindprod.com.invalid> - 2014-06-15 22:20 -0700

csiph-web