我有一个如下的类:
public class MyClass {
interface MyBuilder {
List<MyObject> initObjects(String quantifier);
}
private static class Builder1 implements MyBuilder {
@Override
List<MyObject> initObjects(String quantifier) {
// code omitted for clarity
}
}
private static class Builder2 implements MyBuilder {
@Override
List<MyObject> initObjects(String quantifier) {
// code omitted for clarity
}
}
private static HashMap<String, MyBuilder> builders = ….;
static {
builders.put("type1", new Builder1());
builders.put("type2", new Builder2());
}
//etc 有没有办法通过Java8将这段代码转换为函数引用,并以某种方式使其“更短”?
我想练习一些带有函数引用等的Java8习惯用法
发布于 2017-06-21 16:27:12
因为MyBuilder是一个函数接口(只有一个方法的接口),所以可以内联Builder1和Builder2的实现
static {
builders.put("type1", quantifier -> /*code here*/);
builders.put("type2", quantifier -> /*code here*/);
}此外,您的MyBuilder接口等同于java.util.function.Function<String, List<MyObject>>
private static HashMap<String, Function<String, List<MyObject>> builders = ….; 发布于 2017-06-21 16:42:17
我真的不喜欢这样,特别是当你有很多实现的时候,但是你可以把所有的东西都放在接口里面:
interface MyBuilder {
public List<MyObject> initObjects(String quantifier);
default List<MyObject> initObjectsType1() {
return initObjects("type1");
}
default List<MyObject> initObjectsType2() {
return initObjects("type2");
}
}https://stackoverflow.com/questions/44670551
复制相似问题