Enums with common method implementation.

Working with JDK 1.4 , i had some typesafe enums with common methods in an abstract class. Because of some issues, i want to migrate them to 'enums' provided in JDK 5.
As enum provided in JDK 5 can neither be extended or derived from any other class, i am unable to achieve my objective.
Is there any way out, or should i continue to live with my old code?
Thanks,
Prabhaker

Well, there's always this ugly pretend-you-have-multiple-inheritance sort of construct:
public class CommonEnumUtilities
    // the following method is the actual implementation of method foo
    public static void foo(Enum e, Object... otherParams)
public interface CommonEnumInterface
    // the following ensures that you have the method foo
    public void foo(Object... otherParams);
public enum SomeEnum implements CommonEnumInterface
    public void foo(Object... otherParams)
        CommonEnumUtilities.foo(this, otherParams);
}I personally find this approach revolting, but I guess it's better than nothing.

Similar Messages

  • Defining enum with abstract method which returns a generic type

    Is it possible to define an abstract method which returns an geneic type like below? Thanks
    public enum Type{
         A{
              public List<Integer> getData(){}
         B{
              public Set<String> getData{}
         abstract<T> T getData();
    }

    vulee wrote:
    Why not?
    List<Integer> lst = Type.A.getData();Wonder, which compiler you use. Can't be Java6:
    # javac Enums.java
    Enums.java:23: incompatible types
    found   : java.util.Collection<capture#376 of ?>
    required: java.util.List<java.lang.Integer>
                    List<Integer> data = Type.A.getData();
                                                       ^
    1 errorEdit: Unless you do it the generic way as you proposed, which actually is a phoney. Because of the T being a generic method parameter, the compiler will infer it from the type of the variable it gets assigned to. Hence, both of the following will compile:
    List<Integer> lst = Type.A.getData();
    Set<String> lst2 = Type.A.getData(); // Runtime exceptionActually, javac is telling you that giving warnings on the enum constants redefined method return types.
    Edited by: stefan.schulz on Sep 10, 2008 11:38 PM

  • Enums with constant-specific method implementation

    Just faced the following problem. I have a persistent class with one of the fields of it is enum with constant-specific method implementation:
    @Persistent
    public class Message
       static public enum Type
           DEFAULT
               @Override
               public String getDescription() { return "Some description"; }
           public abstract String getDescription();
       private Type type;
    }When I try to store the record, I get the exception:
    java.lang.IllegalArgumentException: Class could not be loaded or is not persistent: messages.Message$Type$1The problem seem to be in that compiler creates a separate class, namely Message$Type$1.class for the DEFAULT instance and this class is not known by BDB..
    If I remove the constant-specific method from enum, everything's working fine (as the ..$1.class is not created by compiler).. Except the fact that I'd like to have constant-specific methods there..
    Any ideas on this? Maybe it's a bad idea to create constant-specific methods if it means that each constant would get own class file (and they would bloat the storage routines)?

    Hi Mikhail,
    I recreated the problem here and you're right, constant-specific methods aren't working. This isn't something we thought about, to be honest, or tested.
    Just based on an initial quick look I see that for the compiler generated class, the Class.isEnum method returns false, which is why we don't recognize this as an enum and eventually why we throw the exception you're seeing. But assuming that we can identify the class as an enum (that shouldn't be too difficult) I don't know what other problems we will run into in trying to support this.
    For now I think the best thing is to avoid using the constant-specific methods. I have opened a ticket (#18357) so that we'll remember to look into this in more detail and see whether it can be supported in the future.
    If we are able to support it, then I'm hoping that we won't to store extra metadata for constants that have methods. In other words, I'm hoping that we won't have to add any extra storage or processing overhead.
    --mark                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

  • Passing Enum Values to a common method.Please see

    How do I pass the value of an Enum to a method?
    I have an Enum called myEnums with several values to a common method
    public enum MYEnums {
            FULL,
            EMPTY,
            PARTIAL
            CPTY_CODE;
    //Invoke
    isEmpty(myEnums.FULL)
    isEmpty(myEnums.EMPTY)
    // common method
    isEmpty(String enumValue){
    myEnum.enumValue
    ERROR: enumValue cannot be resolved

    You could also write this:
    public enum FillLevel
        FULL,
        EMPTY,
        PARTIAL;
        public boolean isEmpty() {
          return this == EMPTY;
        public boolean isFull() {
          return this == FULL;
    }By the way. What does CPTY_CODE mean? It doesn't seem as if it belongs into the enum. Also, why doesn't the enum have a name that tells us what it's all about?

  • J2ee.jar causes problems with commons-logging.jar

    Hi All -
    (JDK 1.5.0_03, commons-logging 1.0.4, latest j2ee.jar, Eclipse 3.1.0 RC3 )
    I am developing some components that are to be used within j2ee containers and in standalone mode as well. When I run the software under Tomcat, it works correctly (Tomcat is not using the j2ee.jar that comes with Sun's App server obviously), but when I develop with the j2ee.jar file that comes with Sun's App server, I can't use commons-logging. For example, the code supplied below (a class with only this line in the main method, not using any j2ee features) will fail JUST by having j2ee.jar in my path, but if I take it out of the path, it works fine. I am also on the commons-logging mail list and no one there has been able to solve this issue for me. Again, if I deploy my application to Tomcat, I don't have this problem.
    The isolated line that is giving me the issue (and will give the issue even in a non j2ee application that just has this one line) is this:
    log= LogFactory.getLog(CommonsLoggingTest.class);
    When I run this without j2ee.jar in the path, it works fine. When I run it with j2ee.jar in the path, I get this:
    Exception in thread "main" org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: java.lang.NullPointerException (Caused by java.lang.NullPointerException) (Caused by org.apache.commons.logging.LogConfigurationException: java.lang.NullPointerException (Caused by java.lang.NullPointerException))
         at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:543)
         at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235)
         at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209)
         at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)
         at com.redhawk.testing.CommonsLoggingTest.doTest(CommonsLoggingTest.java:27)
         at com.redhawk.testing.CommonsLoggingTest.main(CommonsLoggingTest.java:45)
    Caused by: org.apache.commons.logging.LogConfigurationException: java.lang.NullPointerException (Caused by java.lang.NullPointerException)
         at org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:397)
         at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:529)
         ... 5 more
    Caused by: java.lang.NullPointerException
         at org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:374)
         ... 6 more
    Anyone have any ideas? Its really annoying to have to take this jar file out of my path every time I want to run a test. I could just start developing against other implementations of the j2ee classes I need (for example, Tomcat's jar files do not give this error) but for various reasons that is also undesirable.
    Thanks!
    Jason

    This problem does not arise with commons-logging 1.0.3.
    Any idea what is different in 1.0.4 that would introduce problems when Sun's j2ee.jar is in the path?

  • Enum with arbitrary values

    Is it possible to define an enum with arbitrary values as in the following C line :
    enum { MINE = 5, YOURS = 12 }
    oz

    Hi OZ,
    No, it is not possible in LabVIEW 6.0.2 or lower.
    I have read that it can be done in CVI and then exported to LabVIEW. If I had to guess I would probably say it was Jeane-Pierre Droilet (?sp), or Dr. Scott Hanna (?sp), or Rolf Kalbermatter (?sp) who posted a method for accomplishing this task.
    If you are interested in finding out how this was done I suggest you use Brian Renken's Search engine at
    http://www.searchview.net/
    to find the posting (it was posted in 2000 or 2001 I think). I believe they are called "sparse enum's".
    If you want to accomplish a similar functionality with pure "G" you could use a translator type sub-VI. The translator would use the use the enum value to index an array of constants that has the "Sparse-enum"s you want returned.
    An advantage of this method can be realized if the translator is implemented as an action engine where the "indexed-array" is read from an un-initialized shift register. This would allow redifining the enums "on-the-fly.
    I hope this helps,
    Ben
    Ben Rayner
    I am currently active on.. MainStream Preppers
    Rayner's Ridge is under construction

  • Single payment for Multiple vendor with Common Remit to payee

    HI
    2 vendors "A" and "B" maintained with common remit to payee as "X "Vendor. 2 PO created and 2 invoice created. both the invoice are open for payment. When i run automatic payment with both the vendor, can i get single payment cheque ?. Payment method for both vendor is Cheque. I have done necessary setting in vendor master for single payment.

    Hi Madhavan,
    Before doing the payment you should change the setting of APP.
    Go to OBVU transaction
    There is option 'single payment for marked item' in Grouping of items
    Select that check box
    Now you can pay one single payment for 2 vendors invoices
    May be this information is useful to you
    If you have any doubt feel free to ask
    Regards
    Surya

  • WebService with multiple methods

    Hello to everybody.
    I need an help with the develop of a WebService that it comes with 2 methods: I have already created a lot of WebService in JCAPS6 with only one method and everything was gone well. I tried to implement a WebService with 2 or more method but when I tried to deploy the project I always received this error message: "Deploying application in domain failed; Deployment descriptor file META-INF/application.xml in archive [nameOfArchive]. Duplicate unique value [element] declared for identity constraint of element "application"."
    Theese are the steps that I have done:
    1) create an XSD for Input message
    2) create an XSD for Output message
    3) create a WebServiceDefinition with 2 methods "Method1" and "Method2" and all message (input/output) implemented
    4) create a BusinessProcess (bp1) to implement Method1 operation
    5) create a BusinessProcess (bp2) to implement Method2 operation
    6) create a Connectivity map whith "bp1" and "bp2" directly connected with a new "Web Service External Application"
    7) create a deployment profile
    The "Build" operation was gone well but the "Deploy" operation always returned me an exception.
    What can I do to develop this type of WebService?
    Anyone can help me?
    Thank you in advance.
    Best regards,
    Marco Tranquillin

    My collegue found a solution:
    1) create WSDL with 2 or more operations (with input,output and fault messages);
    2) drag & drop "Event Based Decision" element into Business Process;
    3) link "Start" to "Event based decision";
    4) link "Event based decision.end" to "End";
    5) link a scope (with inside what you want) with "Event based decision";
    6) choose your operation from WSDL and drag & drop it OVER the icon with the mail icon;
    7) link operation.reply with the output scope and with the element "Event Based Decision.end";
    Marco Tranquillin

  • In which case we need a class with all methods defined as abstract ?

    In which case we need : A class with all methods defined as abstract (or should we go for Interface always in this case)

    The concept of interface and abstract class overlaps sometime, but we can have the following thumb rule to use them for our specific need:
    1) Interface: This should be use for code structuring. They standardize your application by providing a specific contract within and outside. If you think abstract class also provide structure, then reconsider as it limits the structure re-usability when there are many super-classes to inherit from. Java allow multiple inheritance by interface and not by Abstract class.
    2) Abstract Class: This should be use for code-reusability. Interface doesn't have any code so can't be used for code-reusability.
    Actually we can use both to provide the best.Taking a refernce to J2EE framework, the "Servlet" is an interface. It laids down the contract/structure for any code to be a servlet.
    But the "GenericServlet" class is an abstract class which provides implementation of some of the methods defined in the "Servlet" interface and leave some method abstract.
    Thus we see that the "Servlet" interface standardise the structure and the "GenericServlet" abstract class gives code re-usability.
    Original Question:
    In which case we need a class with all methods defined as abstract ?To this question, as all methods are abstarct we don't have option for code-reusability. so why not add standard structure concept to your application. So if there is not any restriction on making the field variable(if any) as final, we should go with the interface concept.

  • Can I call an object with synchronized methods from an EJB

    I have a need for multiple threads (e.g. Message Driven Beans) to access a shared object, lets say a singleton, I'm aware of the "you can't have a singleton in the EJB world" issues) for read/write operations, so the operations will need to be synchronised.
    I've seen various statements such as you can't use read/write static fields in EJBs and you can't use synchronisation primitives in EJBs but I've also seen statements that say its okay to access utility classes such as Vector (which has synchronised methods) from an EJB.
    Does anyone know if there is a definitive answer on this? What are the implications of accessing a shared object with synchronised methods from multiple EJBs? Is it just that the EJB's thread may block which limits the ability of the container to manage the EJBs? In the Vector example above (from Professional Java Server Programming) did they mean its okay to use these utility classes provided they aren't shared across threads?
    If I can't use a plain old Java Object does anyone know if there are other potential solutions for sharing objects across EJBs?
    In my problem, I have an operation that I want to run in a multi-threaded way. Each thread will add information to the shared object, and this info may be used by the other threads. There's no lengthy blocking as such other than the fact that only one thread can be adding/reading information from the shared object at a time.
    I've trawled through this forum looking for similar questions of which there seem to be many, but there doesn't seem to be any definitive answers (sorry if there was and I missed it).
    Thanks
    Martin

    You can share objects among EJB's or among objects used by one or more EJB's. You can use synchronization primitives - nothing will prevent you from doing that.
    After all, the container classes, JVM-provides classes, JDBC, JCA, JNDI and other such classes do all of this with impunity. You can too. You can use file and socket I/O as well, presuming you configure the security profile to allow it. Should you? Well it depends on what you need to accomplish and if there is another practical alternative.
    Yes the specification warns you not to, but you cannot be responsible for the interior hidden implementation of classes provided to you by the JVM or third parties so you can never truly know if your are breaking these written rules.
    But when you do these things, you are taking over some part of the role of the container. For short running methods that only block while another thread is using the method or code block and no I/O or use of other potentially blocking operations are contained in the method/block, you will be fine. If you don't watch out and create deadlocks, you will harm the container and its managed thread pool.
    You should not define EJB methods as synchronized.
    Also, if you share objects between EJB's, you need to realize that the container is free to isolate pools of your EJB in separate classloaders or JVM's. It's behavior can be influenced by your packaging choices (use of .ear, multiple separate .jar's, etc.) and the configuration of the server esp. use of clustering. This will cause duplicate sets of shared classes - so singletons will not necessarily be singleton across the entire server/cluster, but no single EJB instance will see more than one of them. You design needs to be tolerant of that fact in order to work correctly.
    This isn't the definitive answer you asked for - I'll leave that to the language/spec lawyers out there. But in my experience I have run across a number of occasions where I had to go outside of the written rules and ave yet to be burned for it.
    Chuck

  • When to use abstract classes instead of interfaces with extension methods in C#?

    "Abstract class" and "interface" are similar concepts, with interface being the more abstract of the two. One differentiating factor is that abstract classes provide method implementations for derived classes when needed. In C#, however,
    this differentiating factor has been reduced by the recent introduction of extension methods, which enable implementations to be provided for interface methods. Another differentiating factor is that a class can inherit only one abstract class (i.e., there
    is no multiple inheritance), but it can implement multiple interfaces. This makes interfaces less restrictive and more flexible. So, in C#, when should we use abstract classes
    instead of interfaces with extension methods?
    A notable example of the interface + extension method model is LINQ, where query functionality is provided for any type that implements IEnumerable via
    a multitude of extension methods.

    Hi
    Well I believe Interfaces have more uses in software design. You could decouple your component implementing against interfaces so that
    you have more flexibility on changing your code with less risk. Like Inversion of Control patterns where you can use interfaces and then when you decide you can change the concrete implementation that you want to use. Or other uses for interfaces is you could
    use Interceptors using interfaces (Unity
    Interceptor) to do different things where not all of these is feasible or at least as straightforward using abstract classes.
    Regards
    Aram

  • Testing ActionScript classes with native methods?

    Hi,
    I have an ActionScript class that I'm writing and would like to test using FlexUnit.
    The only issue is that the ActionScript class has a member in it that is a class with native methods.
    So, I get the following error when trying to run a test of that ActionScript class:
    VerifyError: Error #1079: Native methods are not allowed in loaded code.
    Does anyone know of a way to get around this?  FlexUnit seems not to like native methods being present.
    Thanks,
    Matt

    Hi casdvm,
    by definition, you only own objects that you created using one of the alloc* methods, copy: or new:. All other objects (IIRC with a few noted exceptions) are autoreleased.
    If you create convenience methods in your own class, you should follow the same rule. For example, if you have a class Pet and want to implement the method +petWithName, your code might look something like that:
    + petWithName: (NSString *)name
    return [[[Pet alloc] initWithName: name] autorelease];
    Alex

  • Creating shared library of native method implementation using gcc

    Hi
    I am using Dev-C++ IDE for writing and compiling C Programs. It supports gcc.
    I have to build a shared library of a native method implementation using gcc compiler.
    In JNI tutorial build script is given for VC++ which is as follows
    cl -Ic:\java\include -Ic:\java\include\win32
    -LD HelloWorldImp.c -Fehello.dll
    Similarly I wanted build script for gcc compiler.
    Thanks
    Shailesh

    Here is an example of building a library from one module with CygWin's gcc:
    # Must set JAVA_HOME and LIBRARY_MODULE before
    gcc -mno-cygwin -D__int64="long long" -I $JAVA_HOME/include/win32 -I $JAVA_HOME/include -shared -Wl,--kill-at -o $LIBRARY_MODULE.dll $LIBRARY_MODULE.c

  • Regarding Interface methods implementation

    Hi,
    I have a interface with 3 methods.
    public interface test{
    public void A();
    public void B();
    public void C();
    public class IntImpl implements test{
    public void B(){
    //implementation
    Can we implement an interface with out implementing all the methods of interface .instead implementing a few methods in the interface?
    i came to know that we can do the above one with out any exceptions? So any of you can resolve this issue ..
    Thanks in advance
    Sri

    Can we implement an interface with out implementing
    all the methods of interface .instead implementing a
    few methods in the interface?In other words: can we implement an interface without implementing it?
    The answer should be obvious.
    i came to know that we can do the above one with out
    any exceptions? Sure, it's quite easy, you already did it. The stuff above won't compile, hence it won't throw an exception when running.
    Or you can also avoid compiler errors by declaring IntImpl as abstract. Which means you didn't implement the interface though.

  • What are the common methods in the WD Application?

    Hi
    Please let me know the common methods in the Web Dynpor application
    regards
    mmukesh

    If you create a Application with many DCs, you may have a DC , called common ,DC that makes all common tasks, that every DC needs to do such  calling back end for obtaining a list of available Unit of Measure, Currencies, etc.,
    a logger can also be in the common DC since most of the DC will use a logger.

Maybe you are looking for