使用枚举值来调用不同的方法

The*_*ike 1 java enums

问题:我需要根据不同的枚举值执行不同的操作或执行不同的代码行(可以通过调用不同的方法来完成),并且不想使用 if else。

假设我有以下枚举:

public enum Sports
{
  FOOTBALL, HOCKEY;
}
Run Code Online (Sandbox Code Playgroud)

我们可以使用 Sports.FOOTBALL 和 Sports.HOCKEY 调用具有相同名称的不同方法(方法重载),甚至调用具有不同名称的不同方法吗?

public void method(parameter(s)) //call this method when Enum is Sports.FOOTBALL
{

}

public void method(parameter(s)) //call this method when Enum is Sports.HOCKEY
{

}
Run Code Online (Sandbox Code Playgroud)

这两种方法都是同一个类的一部分。我正在寻找任何情况的解决方案(当方法具有相同名称或不同名称时)。

Gho*_*ica 5

方法签名需要不同的类型,以便编译器能够区分它们。

但是:您的枚举类型是Sports。Sports.Football或者Sports.Hockey只是该类型的实例;或多或少类似于“1”和“2”是 String 类型的实例。

因此:不同的枚举常量不可能重载。

您可以实现的“最好”是switch()遍历您的枚举实例,然后相应地“调度”,或者如评论中所述:一个可以将map不同的枚举常量映射到某种“可执行代码块”的映射。