在java 8 Functional Interface中,为什么default和static方法的返回类型应为Same Functional Interface name。
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()){
case R.id.menu_deleteItem:
ca.remove(ca.getItem(info.position));
ca.notifyDataSetChanged();
//delete from my storage
Utilities.deleteCar(ca.getItem(info.position));
return true;
default:
return super.onContextItemSelected(item);
}
}
答案 0 :(得分:1)
他们不必。方法可以是无效的或返回任何内容。
恰好Comparator
有静态和默认方法返回Comparator
,但这只是偶然的。
许多默认方法返回自我类型,因为这允许方法链接。
答案 1 :(得分:1)
默认静态方法仅将其定义为返回类型。
对于Comparator
,返回Comparator
是有意义的,因为这些方法是工厂方法。
查看具有默认静态方法的其他功能接口,您将看到不同的内容
例如:Iterable.forEach()
定义为default void forEach(Consumer<? super T> action)
答案 2 :(得分:1)
功能界面中的静态/默认方法没有得到特殊处理。它们的工作方式与普通接口中的任何其他默认/静态方法相同。他们可以回报任何他们喜欢的东西。
您会看到功能界面中的静态/默认方法会返回相同的类型,因为将它们放在那里是有意义的。
例如,您还会在哪里放置comparing
方法?在Consumer<T>
或Supplier<T>
?不,只有把它放在Comparator<T>
中才有意义。对于thenComparing
方法,这是因为在比较器对象上调用它们是有用且可读的:
Comparator.comparing(x -> x.something).thenComparing(x -> x.somethingElse)
如果您编写自己的功能界面,并且想到可以在其上完成的某些操作,将其转换为另一个功能界面,则将其添加进去!写一个返回另一个类型的默认方法!