我探索了Java8的特性,并遇到了"Functional“。
根据我的理解,这些接口可以有一些默认的实现方法如下:
@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...");
}
}但我怀疑的是,这是抽象阶级的目的。
为什么引入功能接口。
发布于 2013-11-13 09:30:39
但我怀疑的是,这是抽象阶级的目的。 为什么引入功能接口。
可以扩展的类数:1
可实现的接口数:more than 1
发布于 2013-11-13 10:14:19
函数接口用于“安全”多重继承。差异:
典型用法是当您希望将默认功能嵌入到对象中时。也就是说,如果你有一个类似函数的对象,
class MyFunction1 {
public Integer apply(String s){
...
}
}
class MyFunction2 {
public List<String> apply(Integer s){
...
}
}如果你想用它们作曲,你只要加入implements Function就行了
class MyFunction1 implements Function<String, Integer>{
public Integer apply(String s){
...
}
}
class MyFunction2 implements Function<Integer, List<String>>{
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);差分
compose和identity。compose()这样的函数不包括在类定义中,因为它会导致类大小的增长。它们通常被放入单独的实用程序类中。在番石榴中,将组合放入一个单独的实用程序类Functions:Functions.compose中。因此,对于新的函数接口,您不需要回忆函数在哪个实用程序类中实现的问题。发布于 2013-11-13 09:34:24
函数接口必须只有一个方法。惟一的例外是在Object中声明的mehtods。请参阅http://java.dzone.com/articles/introduction-functional-1
https://stackoverflow.com/questions/19950013
复制相似问题