首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java 8-函数接口与抽象类

Java 8-函数接口与抽象类
EN

Stack Overflow用户
提问于 2013-11-13 09:27:34
回答 5查看 18.2K关注 0票数 7

我探索了Java8的特性,并遇到了"Functional“

根据我的理解,这些接口可以有一些默认的实现方法如下:

代码语言:javascript
复制
@FunctionalInterface
public interface ComplexFunctionalInterface extends SimpleFuncInterface 
{
    default public void doSomeWork()
    {
        System.out.println("Doing some work in interface impl...");
    }
    default public void doSomeOtherWork()
    {
        System.out.println("Doing some other work in interface impl...");
    }
}

但我怀疑的是,这是抽象阶级的目的。

为什么引入功能接口

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-11-13 09:30:39

但我怀疑的是,这是抽象阶级的目的。 为什么引入功能接口。

可以扩展的类数:1

可实现的接口数:more than 1

票数 15
EN

Stack Overflow用户

发布于 2013-11-13 10:14:19

函数接口用于“安全”多重继承。差异:

  • 类可以扩展多个功能接口。
  • 函数接口可能只有一个抽象方法。
  • 函数接口可能没有与C++抽象类不同的字段。

典型用法是当您希望将默认功能嵌入到对象中时。也就是说,如果你有一个类似函数的对象,

代码语言:javascript
复制
class MyFunction1 {
    public Integer apply(String s){
        ...
    }
}

class MyFunction2 {
    public List<String> apply(Integer s){
        ...
    }
}

如果你想用它们作曲,你只要加入implements Function就行了

代码语言:javascript
复制
class MyFunction1 implements Function<String, Integer>{
    public Integer apply(String s){
        ...
    }
}

class MyFunction2 implements Function<Integer, List<String>>{
    public List<String> apply(Integer s){
        ...
    }
}

你可以创建一个功能的组合。比较了两种方法:

无功能接口:

代码语言:javascript
复制
MyFunction1 myFunction1 = ...;
MyFunction2 myFunction2 = ...;

Function<String, List<String>> composition = (s) -> myFunction2.apply(myFunction1.apply(s));

具有功能接口的

代码语言:javascript
复制
MyFunction1 myFunction1 = ...;
MyFunction2 myFunction2 = ...;

Function<String, List<String>> composition = myFunction1.andThen(myFunction2);

差分

  • 不需要重新实现函数.
  • 扩展类中的其他可用函数:composeidentity
  • 新的默认函数是类层次结构()的一部分,不需要创建新的对象。通常,像compose()这样的函数不包括在类定义中,因为它会导致类大小的增长。它们通常被放入单独的实用程序类中。在番石榴中,将组合放入一个单独的实用程序类FunctionsFunctions.compose中。因此,对于新的函数接口,您不需要回忆函数在哪个实用程序类中实现的问题。
票数 3
EN

Stack Overflow用户

发布于 2013-11-13 09:34:24

函数接口必须只有一个方法。惟一的例外是在Object中声明的mehtods。请参阅http://java.dzone.com/articles/introduction-functional-1

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19950013

复制
相关文章

相似问题

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