Java8-函数接口与抽象类
我在探索Java8的特性时遇到了“功能接口” 根据我的理解,这些接口可以有一些默认的实现方法,如:Java8-函数接口与抽象类,java,functional-interface,Java,Functional Interface,我在探索Java8的特性时遇到了“功能接口” 根据我的理解,这些接口可以有一些默认的实现方法,如: @FunctionalInterface public interface ComplexFunctionalInterface extends SimpleFuncInterface { default public void doSomeWork() { System.out.println("Doing some work in interface impl
@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...");
}
}
但我怀疑的是,这就是抽象类的用途
为什么要引入功能接口
但我怀疑的是,这就是抽象类的用途
为什么要引入功能接口
可扩展的类数:1
可以实现的接口数量:
超过1个
我还没有使用JAVA 8的经验,但从我所看到的情况来看,这将允许一种多重继承,这在抽象类中是不可能的接口比较器是功能性的,尽管它明确声明了两种方法,因为只有一个是抽象的;equals是从对象继承的具体方法的显式声明,如果没有此声明,该方法将被隐式声明。函数接口必须只有一个方法。唯一的例外是在对象中声明的方法。请参见功能接口用于“安全”多重继承。差异:
- 一个类可以扩展多个功能接口
- 功能接口可能只有一个抽象方法李>
函数接口可能没有与C++抽象类不同的域。
class MyFunction1 {
public Integer apply(String s){
...
}
}
class MyFunction2 {
public List<String> apply(Integer s){
...
}
}
您可以创建函数的组合。比较了两种方法:
无功能接口:
MyFunction1 myFunction1 = ...;
MyFunction2 myFunction2 = ...;
Function<String, List<String>> composition = (s) -> myFunction2.apply(myFunction1.apply(s));
MyFunction1 myFunction1 = ...;
MyFunction2 myFunction2 = ...;
Function<String, List<String>> composition = myFunction1.andThen(myFunction2);
MyFunction1 MyFunction1=。。。;
MyFunction2 MyFunction2=。。。;
函数组合=(s)->myFunction2.apply(myFunction1.apply(s));
具有功能接口:
MyFunction1 myFunction1 = ...;
MyFunction2 myFunction2 = ...;
Function<String, List<String>> composition = (s) -> myFunction2.apply(myFunction1.apply(s));
MyFunction1 myFunction1 = ...;
MyFunction2 myFunction2 = ...;
Function<String, List<String>> composition = myFunction1.andThen(myFunction2);
MyFunction1 MyFunction1=。。。;
MyFunction2 MyFunction2=。。。;
函数组合=myFunction1。然后(myFunction2);
差异
- 无需重新执行功能
- 扩展类中可用的其他函数:
和compose
identity
- 新的默认函数成为类层次结构的一部分,无需创建新对象。通常像
这样的函数不包括在类定义中,因为它会导致类大小的增长。它们通常被放入不同的实用程序类中。在番石榴中,成分被放入一个单独的实用程序类compose()
函数
:。因此,对于新的函数接口,您不需要回忆在哪个实用程序类中实现了您的函数