关于Java8 内置
功能接口,我遇到了许多问题,包括this,this和this。但是所有人都问“为什么只有一种方法?”
或“如果使用功能接口执行X,为什么会出现编译错误”等。我的问题是: 当我仍然可以在自己的接口中使用lambda时,这些新功能接口的存在目的 是
什么 ?
考虑一下oracle文档中的以下示例代码:
// 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);
}
我可以将lambda传递给这两种方法。
第一种方法为我节省了一个自定义界面。 是这个吗?
还是这些标准功能接口(消费者,供应商,谓词,功能)旨在用作代码组织,可读性,结构等的模板?
显然,您可以跳过这些新界面,并使用更好的名称来命名自己的界面。但是,有一些注意事项:
CheckPerson
并不是一个好名字,尽管这是主观的。大多数内置接口还定义了其他一些API。例如,Predicate
定义or(Predicate)
,and(Predicate)
和negate()
。
Function
定义andThen(Function)
和compose(Function)
,等等。
直到它不是特别令人兴奋:在函数上使用抽象方法以外的方法可以简化组合,策略选择等等,例如(使用本文建议的样式):
之前:
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;
}
}
还是这些标准的功能接口(消费者、供应商、谓词、函数)是用来充当代码组织、可读性、结构、[其他]的模板?
更准确地说,函数接口定义为具有一个抽象方法的任何接口。 然后他继续介绍示例,其中一个是接口: 我能够测试是否可以使用lambda函数代替比较器参数,并且它能够工作(例如)。
在Java8中,新的包是Java。util。函数包含很多函数接口。该软件包的文档(http://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html)多次提到“函数形状”: 有几种基本函数形状,包括函数(从T到R的一元函数)、消费者(从T到void的一元函数)、谓词(从T到布尔的一元函数)和供应者(从T到
我想出了以下几点:
问题内容: Java 8中功能接口的定义说: 功能性接口被定义为具有任何接口恰好 一个明确声明的抽象方法。(由于接口可能具有非抽象的默认方法,因此必须进行限定。)这就是为什么功能接口以前称为“单一抽象 方法(SAM)”接口的原因,该术语有时仍然可见。 那么我们为什么这样: 作为中的sort方法List是: lambda表达式表示: Lambda表达式应可分配给功能接口 该Comparator接口有
为了丰富运营体验,让开发者更好的体验积分商城功能,兑吧提支持更多的扩展功能 . 支持的扩展功能包含: 1. 游客用户唤醒登录 2. 自有虚拟商品充值 接口说明 充值接口API文档 通知接口API文档 3.加积分接口 接口说明 API文档 4.免登URL自定义参数 dcustom参数 transfer参数 signKeys参数 5. 会员等级功能 6.前置商品查询接口 7. 【秒杀商品】前置查询接口