Кажется, вы ищете реализацию полиморфизма c.
Это возможно с помощью перечислений и функциональных интерфейсов:
class MyClass {
static void method1() {
System.out.println("meow");
}
static void method2() {
System.out.println("woof");
}
enum MyEnum {
CAT(MyClass::method1),
DOG(MyClass::method2);
private MyEnum(Runnable method) {
this.runnable = method;
}
private final Runnable runnable;
public void act() {
System.out.print(name() + ": ");
this.runnable.run();
}
}
public static void main(String[] args) {
String[] inputs = {"cat", "dog" };
for (String input : inputs) {
MyEnum animal = MyEnum.valueOf(input.toUpperCase());
animal.act();
}
}
}
Будет выведено:
CAT: meow
DOG: woof
Но в любом случае под капотом метод Enum
valueOf
использует частную карту пакета enumConstantDirectory
для получения значения перечисления по имени.
public static <T extends Enum<T>> T valueOf(Class<T> enumType,
String name) {
T result = enumType.enumConstantDirectory().get(name);
// ...
}