当前位置: 首页 > 知识库问答 >
问题:

Java8中功能接口的用途

陈俊誉
2023-03-14
    // Approach 6: print using a predicate
     public static void printPersonsWithPredicate(List<Person> roster, 
                                                  Predicate<Person> tester) {
            for (Person p : roster) {
                if (tester.test(p)) {
                   System.out.println(p);
                }
            }
        }
      // Approach 5: 
        public static void printPersons(<Person> roster, 
                                        CheckPerson tester) {
            for (Person p : roster) {
                if (tester.test(p)) {
                   System.out.println(p);
                }
            }
        }


  interface CheckPerson {
        boolean test(Person p);
    }

还是这些标准的功能接口(消费者、供应商、谓词、函数)是用来充当代码组织、可读性、结构、[其他]的模板?

共有1个答案

唐麒
2023-03-14

显然,您可以跳过使用这些新接口,使用更好的名称滚动您自己的接口。但仍有一些考虑:

  1. 除非您的自定义接口扩展了一个内置接口,否则您将无法在其他JDK API中使用自定义接口。
  2. 如果你总是用你自己的来打滚,在某个时候你会遇到你想不出一个好名字的情况。例如,我认为checkperson并不是一个很好的名称,尽管这是主观的。

大多数内置接口还定义了一些其他API。例如,谓词定义了或(谓词)和(谓词)以及否定()

它并不是特别令人兴奋,直到它是:在函数上使用抽象的方法以外的方法允许更容易的组合、策略选择和更多,例如(使用本文建议的样式):

之前:

class PersonPredicate {
  public Predicate<Person> isAdultMale() {
    return p -> 
            p.getAge() > ADULT
            && p.getSex() == SexEnum.MALE;
  }
}

可能会变成这样,最终更可重用:

class PersonPredicate {
  public Predicate<Person> isAdultMale() {
    return isAdult().and(isMale());
  }

  publci Predicate<Person> isAdultFemale() {
    return isAdult().and(isFemale());
  }

  public Predicate<Person> isAdult() {
    return p -> p.getAge() > ADULT;
  }

  public Predicate<Person> isMale() {
    return isSex(SexEnum.MALE);
  }
  public Predicate<Person> isFemale() {
    return isSex(SexEnum.FEMALE);
  }
  public Predicate<Person> isSex(SexEnum sex) {
    return p -> p.getSex() == sex;
  }
}
 类似资料:
  • 问题内容: 关于Java8 内置 功能接口,我遇到了许多问题,包括this,this和this。但是所有人都问“为什么只有一种方法?” 或“如果使用功能接口执行X,为什么会出现编译错误”等。我的问题是: 当我仍然可以在自己的接口中使用lambda时,这些新功能接口的存在目的 是 什么 ? 考虑一下oracle文档中的以下示例代码: 好的,很好,但这可以通过上面自己的示例来实现(带有单个方法的接口已

  • 更准确地说,函数接口定义为具有一个抽象方法的任何接口。 然后他继续介绍示例,其中一个是接口: 我能够测试是否可以使用lambda函数代替比较器参数,并且它能够工作(例如)。

  • 在Java8中,新的包是Java。util。函数包含很多函数接口。该软件包的文档(http://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html)多次提到“函数形状”: 有几种基本函数形状,包括函数(从T到R的一元函数)、消费者(从T到void的一元函数)、谓词(从T到布尔的一元函数)和供应者(从T到

  • 为了丰富运营体验,让开发者更好的体验积分商城功能,兑吧提支持更多的扩展功能 . 支持的扩展功能包含: 1. 游客用户唤醒登录 2. 自有虚拟商品充值 接口说明 充值接口API文档 通知接口API文档 3.加积分接口 接口说明 API文档 4.免登URL自定义参数 dcustom参数 transfer参数 signKeys参数 5. 会员等级功能 6.前置商品查询接口 7. 【秒杀商品】前置查询接口

  • 开发者只需对接完成免登接口、扣积分接口和兑换结果通知接口三个必选接口即可实现商城的基本功能,包括兑换商品,发布积分商城活动等 1.免登录地址接口 用户通过服务端生成的免登录url跳转到积分商城 接口说明 API文档 常见问题 2.扣积分接口 用户点击马上兑换,兑吧向开发者发起兑换请求,开发者进行json响应 接口说明 API文档 常见问题 3.兑换结果通知接口 兑吧把订单的状态通知给开发者,开发者