3 回答
TA贡献1805条经验 获得超10个赞
如果do1等只是实现,而不是类的公共接口的一部分,那么创建一个私有类(甚至可能是嵌套类)可能是有意义的,它的构造函数接受它作为实例变量保留的两个映射:
private static class Worker {
Worker(Map firstMap, Map secondMap) {
this.firstMap = firstMap;
this.secondMap = secondMap;
}
void do1() {
// ...update `this.lastMap` if appropriate...
}
void do2() {
// ...update `this.lastMap` if appropriate...
}
}
我在那里做了Worker static一个静态嵌套类,而不是内部类,但static如果您需要访问周围类的内部结构,它可以是内部类(否)。
然后
public Map<String, Object> transformMapOnAnotherMap(Map<String, Object> firstMap) {
Worker worker = new Worker(firstMap, new HashMap<String, Object>(firstMap));
worker.do1();
worker.do2();
worker.do3();
worker.do4();
//more 20 methods
return worker.lastMap;
}
TA贡献1865条经验 获得超7个赞
您可以使用interface并使每个“做”功能接口的实现。
interface Do {
Map<String, Object> apply(Map<String, Object> firstMap, Map<String, Object> lastMap);
}
然后你可以初始化 static dos:
static Do[] allDos = {
(firstMap, lastMap) -> {
// do0
},
(firstMap, lastMap) -> {
// do1
},
// ...do2, do3, ...
};
如果您需要调用do0 -> do2 -> do4例如:
public Map<String, Object> transformMapOnAnotherMap(Map<String, Object> firstMap) {
Map<String, Object> lastMap = new HashMap<String, Object>(firstMap);
int[] ids = { 0, 2, 4 };
for (int id : ids)
lastMap = allDos[id].apply(firstMap, lastMap);
return lastMap;
}
TA贡献1817条经验 获得超6个赞
为什么不采取更多的功能方法?
定义接口
interface MapTransformation{
void transformation(Map<String, Object> first, Map<String, Object> last);
}
然后在类创建期间,具有定义的类transformMapOnAnotherMap将转换列表作为参数然后你可以做
class SomeClass {
final private List<MapTransformation> transformations;
//constructor omitted
public Map<String, Object> transformMapOnAnotherMap(Map<String, Object> firstMap) {
Map<String, Object> lastMap = new HashMap<String, Object>(firstMap);
transformations.forEach(t->t.transformation(firstMap,lastMap);
return lastMap;
}
}
添加回答
举报