Java 8功能接口默认和静态方法返回类型与功能接口名称相同?

时间:2018-02-05 16:49:11

标签: java

在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);
    }
}

3 个答案:

答案 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)

如果您编写自己的功能界面,并且想到可以在其上完成的某些操作,将其转换为另一个功能界面,则将其添加进去!写一个返回另一个类型的默认方法!