【发布时间】:2014-01-27 02:23:46
【问题描述】:
这被认为是不好的做法吗?本质上,基于枚举,我想在接口中调用特定的方法。每个枚举都有自己的接口实现(WalkImpl、RunImpl、JogIMpl 等......),所有这些都基于 ActivityService 接口。我只是想知道这是将服务“注入”到枚举中的正确方法。我这样做是因为我无法自动连接服务。谢谢
@Component
public class HelloWorldImpl implements HelloWorld {
private enum MyEnum{
WALK {
@Override
public void execute() {
System.out.println("I am walking");
activityService.doSomethingWithMe(this.name());
}
},
RUN{
@Override
public void execute() {
System.out.println("I am running");
}
},JOG{
@Override
public void execute() {
System.out.println("I am jogging!");
}
}, SKIP{
@Override
public void execute() {
System.out.println("I am skipping!");
}
};
public abstract void execute();
private static ActivityService activityService;
public void setActivityService(ActivityService activityService) {
this.activityService = activityService;
}
}
@Autowired
ActivityService activityService;
@Override
public void executeMe(){
MyEnum myEnum = MyEnum.WALK;
myEnum.setActivityService(activityService);
myEnum.execute();
}
}
【问题讨论】:
-
如果不了解您要完成的实际任务,很难准确地说出。我会说使用枚举来完成这类工作通常是使用了错误的工具,尤其是在使用 Spring 组件扫描时;我通常更喜欢将实现注入到持有者/调度程序中的命令对象模式。