我有一个小组项目,我们被迫使用提供的接口和枚举.
想象一下如下情况:
// marker interface
interface Request<T extends Response>{}
// marker interface
interface Response{}
enum TypeAction implements Request<SomeEnumClassThatImplementsResponse>{
TYPE1, TYPE2, TYPE3
}
enum OtherTypeAction implements Request<SomeOtherEnumClassThatImplementsResponse>{
OTHERTYPE1, OTHERTYPE2
}
Run Code Online (Sandbox Code Playgroud)
在另一个类中,我有一个这样的请求列表:List<Request> req = new LinkedList<Request>()
我想要做的是:做一个如下所示的开关:
switch(a_request){
CASE TYPE1: ....
CASE TYPE2: ....
CASE TYPE3: ....
CASE TYPE2: ....
CASE OTHERTYPE1: ....
CASE OTHERTYPE2: ....
}
Run Code Online (Sandbox Code Playgroud)
我怎么能设法做到这一点?
重要说明:我无法在接口和枚举中添加方法,但我可以创建实现上面可以看到的接口的新枚举.如果可能的话,我宁愿没有两个能做同样事情的枚举.
编辑:它与可能的重复答案不同,因为我无法在Request接口中添加任何方法,因此我无法在枚举类中实现方法.
提前致谢
如何转换这段代码:
private static Map<CustomObj<? extends CustomOtherObj>, CustomEnumeration> map;
if (map == null) {
map = Arrays.stream(CustomEnumeration.values())
.collect(Collectors.toMap(x -> x.source, x -> x));
}
Run Code Online (Sandbox Code Playgroud)
进入Java 7等价?(Arrays.stream.collect(Collectors....)部分.
基本上,上面的代码将一些元素放在地图中.