gpt4 book ai didi

java - 如何在多个 Enum 中重用代码

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:59:20 25 4
gpt4 key购买 nike

我们知道 java 枚举类:

  1. 隐式扩展 java.lang.Enum;
  2. 不能从任何其他枚举类扩展。

我有多个枚举类,如下所示:

enum ResourceState {
RUNNING, STOPPING,STARTTING;//...
void aMethod() {
// ...
}
}

enum ServiceState {
RUNNING, STOPPING,STARTTING,ERROR;//...
void aMethod() {
// ...
}
}

枚举ResourceStateServiceState中的方法aMethod()是完全一样的。

在 OOP 中,如果 ResourceStateServiceState 不是枚举,它们应该将相同的方法抽象为一个 super 抽象类,如下所示:

abstract class AbstractState{
void aMethod() {
// ...
}
}

但 ResourceState 无法从 AbstractState 扩展,您有什么解决办法吗?

最佳答案

枚举不能扩展其他类,但可以实现接口(interface)。因此,一种更面向对象的方法是让您的枚举实现一个通用接口(interface),然后使用委托(delegate)给提供真正实现的支持类:

public interface SomeInterface {
void aMethod();
}

public class SomeInterfaceSupport implements SomeInterface {
public void aMethod() {
//implementation
}
}

public enum ResourceState implements SomeInterface {
RUNNING, STOPPING,STARTTING;

SomeInterfaceSupport someInterfaceSupport;

ResourceState() {
someInterfaceSupport = new SomeInterfaceSupport();
}

@Override
public void aMethod() {
someInterfaceSupport.aMethod();
}
}

关于java - 如何在多个 Enum 中重用代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15523925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com