У меня есть перечисление, которое похоже
public enum Animal {
ELEPHANT,
GIRAFFE,
TURTLE,
SNAKE,
FROG
}
и я хочу сделать что-то как
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
Я упростил пример в дидактических целях, но это будет действительно полезно для меня для моего реального примера. Я могу сделать это в 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; }
}
но в вашем случае для реальной системы я бы также сделал это Enum, поскольку существует фиксированный набор типов животных.
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...
}
Также обратите внимание, что важно также сделать любую переменную экземпляра окончательной
.
Да, можно. Это будет выглядеть так:
public enum Animal {
ELEPHANT(false),
GIRAFFE(false),
TURTLE(false),
SNAKE(false),
FROG(true);
private final boolean isAmphibian;
Animal(boolean isAmphibian) {
this.isAmphibian = isAmphibian;
}
public boolean isAmphibian() {
return this.isAmphibian;
}
}
Тогда вы бы назвали это так:
Animal.ELEPHANT.isAmphibian ()