作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们知道 java 枚举类:
我有多个枚举类,如下所示:
enum ResourceState {
RUNNING, STOPPING,STARTTING;//...
void aMethod() {
// ...
}
}
enum ServiceState {
RUNNING, STOPPING,STARTTING,ERROR;//...
void aMethod() {
// ...
}
}
枚举ResourceState
和ServiceState
中的方法aMethod()
是完全一样的。
在 OOP 中,如果 ResourceState
和 ServiceState
不是枚举,它们应该将相同的方法抽象为一个 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/
我是一名优秀的程序员,十分优秀!