[TOC]
释义
Conceptually, a functional interface has exactly one abstract method.
实例
java包的FunctionalInterface
java.lang.Runnable
java.awt.event.ActionListener
java.util.Comparator
java.util.concurrent.Callable
java.util.function.Consumer
java.util.function.Supplier
自己写一个FunctionalInterface
@FunctionalInterface
public interface FunctionalInterfaceSummary {
int doSum(int x); // 抽象方法
String toString();
boolean equals(Object obj);
// boolean equals();
default void display() {
System.out.println("show sth..");
}
}
实现FunctionalInterface原则
1、有且只有一个抽象方法
2、default方法自带实现,所以不是抽象方法,可以放进来
3、一个接口的实现,必然是继承了java.lang.Object的,所以可以@override其中的方法
Create Instance of Functional Interface
如果代码块很大,建议使用2,如果就一句话,建议使用1
1、lambda expressions
public static void main(String[] args) {
String[] name = {"liujingliang", "jinliangliu"};
Arrays.sort(name, (String str1, String str2) -> {
return str1.length() - str2.length();
});
}
2、method references
String[] name = {"liujingliang", "jinliangliu"};
Arrays.sort(name, new Comparator<String>() {
@Override
public int compare(String str1, String str2) {
return str1.length() - str2.length();
}
});
需求:如果这个排序方法,被很多方法使用,那么应该把这个排序抽出来作为静态的成员函数
public static class StringOrder{
public static int byLength(String str1, String str2) {
return str1.length() - str2.length();
}
}
public static void main(String[] args) {
String[] name = {"liujingliang", "jinliangliu"};
Arrays.sort(name, StringOrder::byLength);
}
3、constructor references
public static void main(String[] args) {
Comparator<String> cp = new Comparator<String>() {
@Override
public int compare(String str1, String str2) {
return str1.length() - str2.length();
}
};
String[] name = {"liujingliang", "jinliangliu"};
Arrays.sort(name, cp);
}