Can I add a function to enums in Java?
enums, function, java
Solution
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.
Problem
I have an enum, which looks like ``` public enum Animal { ELEPHANT, GIRAFFE, TURTLE, SNAKE, FROG } ``` and I want to do something like ``` Animal frog = Animal.FROG; Animal snake = Animal.SNAKE; boolean isFrogAmphibian = frog.isAmphibian(); //true boolean isSnakeAmphibian = snake.isAmphibian(); //false boolean isFrogReptile = frog.isReptile(); //false boolean isSnakeReptile = snake.isReptile(); //true boolean isFrogMammal = frog.isMammal(); //false boolean isSnakeMammal = snake.isMammal(); //false ``` I simplified the example for didactic purposes, but this would be really useful to me for my real life example. Can I do it in Java?