Can I add a function to enums in Java?

前端 未结 4 854
长情又很酷
长情又很酷 2020-12-14 05:21

I have an enum, which looks like

public enum Animal {
  ELEPHANT,
  GIRAFFE,
  TURTLE,
  SNAKE,
  FROG
}

and I want to do something like

4条回答
  •  庸人自扰
    2020-12-14 05:57

    Yes Enum is a class in Java:

    public enum Animal 
    {
      ELEPHANT(true),
      GIRAFFE(true),
      TURTLE(false),
      SNAKE(false),
      FROG(false);
    
      private final boolean mammal; 
      private Animal(final boolean mammal) { this.mammal = mammal; }
      public boolean isMammal() { return this.mammal; }
    }
    

    but in your case for a real system I would make that an Enum as well since there is a fixed set of types of animals.

    public enum Type
    {
      AMPHIBIAN,
      MAMMAL,
      REPTILE,
      BIRD
    }
    
    public enum Animal 
    {
      ELEPHANT(Type.MAMMAL),
      GIRAFFE(Type.MAMMAL),
      TURTLE(Type.REPTILE),
      SNAKE(Type.REPTILE),
      FROG(Type.AMPHIBIAN);
    
      private final Type type; 
      private Animal(final Type type) { this.type = type; }
      public boolean isMammal() { return this.type == Type.MAMMAL; }
      public boolean isAmphibian() { return this.type == Type.AMPHIBIAN; }
      public boolean isReptile() { return this.type == Type.REPTILE; }
      // etc...
    }
    

    Also note that it is important to make any instance variable final as well.

    You can find more details about it in the Java Language Specification.

提交回复
热议问题