Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

157
Views
extending an abstract class with generic enum type

Is there a way to extend an abstract class with generic enum types? When I extend it and implement myMethod below, only the method from the abstract class gets called.

  1. first i define abstract class with method myMethod where i would like to make decisions based on the enum value.

    public abstract class MyAbstractClass <T extends enum<T>> {
    
        public void myMethod(T cmd) {
          //i want to override this
        }
    
        public void update(T cmd) {
          myMethod(cmd);
        }
    }
    
  2. define an enum and extend the class, but the child class myMethod never gets called(only the myMethod of abstract class gets called).

    enum CMD {
       CMD_1, CMD_2
    }
    
    public class Child extends MyAbstractClass<CMD> {
    ...
      public void myMethod(CMD cmd) {
        if (cmd == CMD_1) { //do something }
      }
    ...
    }
    
  3. instantiate and call

    Child child = new Child();
    child.update(CMD.CMD_1);
    
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Yes. Use T extends Enum<T>:

public abstract class MyAbstractClass <T extends Enum<T>> {
    public void myMethod(T cmd) {}
}

See live demo of your code, with this change, compiling OK.

over 4 years ago · Santiago Trujillo Report

0

If you want to select the behaviour according to the enum value, then one way to do it is to put the behaviour into each enum value, e.g.:

enum Command {
    CMD1 {
        @Override
        void execute() {
            System.out.println("Command.CMD1");
        }
    },
    CMD2 {
        @Override
        void execute() {
            System.out.println("Command.CMD2");
        }
    };

    abstract void execute();
}

public static void main(String[] args) {
    final Command cmd = Command.CMD1;

    cmd.execute();
}
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!