首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用函数引用等将代码转换为Java 8方法

使用函数引用等将代码转换为Java 8方法
EN

Stack Overflow用户
提问于 2017-06-21 16:20:35
回答 2查看 83关注 0票数 2

我有一个如下的类:

代码语言:javascript
复制
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习惯用法

EN

回答 2

Stack Overflow用户

发布于 2017-06-21 16:27:12

因为MyBuilder是一个函数接口(只有一个方法的接口),所以可以内联Builder1Builder2的实现

代码语言:javascript
复制
static {  
  builders.put("type1", quantifier -> /*code here*/);  
  builders.put("type2", quantifier -> /*code here*/);  
}

此外,您的MyBuilder接口等同于java.util.function.Function<String, List<MyObject>>

代码语言:javascript
复制
private static HashMap<String, Function<String, List<MyObject>> builders = ….;  
票数 4
EN

Stack Overflow用户

发布于 2017-06-21 16:42:17

我真的不喜欢这样,特别是当你有很多实现的时候,但是你可以把所有的东西都放在接口里面:

代码语言:javascript
复制
interface MyBuilder {
    public List<MyObject> initObjects(String quantifier);

    default List<MyObject> initObjectsType1() {
        return initObjects("type1");
    }

    default List<MyObject> initObjectsType2() {
        return initObjects("type2");
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44670551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档