java8 기능 인터페이스의 새로운 기능
기능 인터페이스 : 인터페이스와 추상 메소드는 @FunctionalInterface 주석을 달 수있는 기능 인터페이스를 구성합니다.
인터페이스가 기능 인터페이스라는 제약 조건을 지정합니다. 기능 인터페이스는 자체 추상 메서드를 하나만 가질 수 있습니다.
간편한 사용 :
사용자 정의 기능 인터페이스 : 세 가지 기능 인터페이스가 정의됩니다.
package com.xiaodu.java8.methodcite;
import java.util.function.Supplier;
/**
* 定义函数接口
* @author 84287
*
*/
public interface FunctionInterface {
/*
* 获取类的实例
*/
@FunctionalInterface
interface function01<T>{
T getObject();
}
//函数接口是主要是给Lambda使用 java8中已经有好多函数接口,很多不用自己定义
//本人自己定义的function01<t> 其实和 java.util.function中的Supplier<T>一样的
}
기능 인터페이스 사용 :
public static void main(String[] args) {
function01<String> f01 = () -> "xiaoming";
String string = f01.getObject();
System.out.println(string.length()); // 8
}
Java 8에 포함 된 전체 함수 인터페이스 목록 :
JDK 1.8 이전에 존재했던 기능적 인터페이스 :
· java.lang.Runnable
· java.util.concurrent.Callable
· java.security.PrivilegedAction
· Java.util.Comparator
Java.io.FileFilter
Java.nio.file.PathMatcher
· java.lang.reflect.InvocationHandler
· java.beans.PropertyChangeListener
· java.awt.event.ActionListener
· javax.swing.event.ChangeListener
---------------------
java.util.function. * 아래의 함수 인터페이스
일련 번호 | 인터페이스 이름 && 추상 방법 | 비고 |
---|---|---|
1 | BiConsumer <T, U> ; 무효 수락 (T t, U u); |
두 개의 입력 매개 변수를 받아들이고 결과를 반환하지 않는 작업을 나타냅니다. |
2 | BiFunction <T, U, R> ; R 적용 (T t, U u); |
두 개의 입력 매개 변수를 받아들이고 결과를 반환하는 메서드를 나타냅니다. |
삼 | BinaryOperator <T> ; 继承 BiFunction <T, U, R> ; |
동일한 유형의 두 연산자에 대해 작동하는 작업을 나타내며 동일한 유형의 연산자의 결과를 반환합니다. |
4 | BiPredicate <T, U> ; 부울 테스트 (T t, U u); |
두 매개 변수 반환 부울 값 메서드를 나타냅니다. |
5 | BooleanSupplier | 부울 값 결과의 공급자를 나타냅니다. |
6 |
소비자 <T> ; 무효 수락 (T t); |
입력 매개 변수를 받아들이고 반환하지 않는 작업을 나타냅니다. |
7 | DoubleBinaryOperator ; double applyAsDouble (왼쪽 이중, 오른쪽 이중); |
두 개의 이중 값 연산자의 연산을 나타내며 이중 값 결과를 반환합니다. |
8 | DoubleConsumer ; void accept (double value); |
이중 값 매개 변수를 받아들이고 결과를 반환하지 않는 작업을 나타냅니다. |
9 | DoubleFunction <R> ; R 적용 (이중 값); |
이중 값 매개 변수를 받아들이고 결과를 반환하는 메서드를 나타냅니다. |
10 | DoublePredicate ; 부울 테스트 (이중 값); |
이중 값 매개 변수가있는 부울 리턴 메소드를 나타냅니다. |
11 | DoubleSupplier ; double getAsDouble (); |
매개 변수없이 double 값을 반환하는 메서드를 나타냅니다. |
12 | DoubleToIntFunction ; int applyAsInt (이중 값); |
이중 유형 입력을 수락하고 int 유형 결과를 반환합니다. |
13 | DoubleToLongFunction ; long applyAsLong (이중 값); |
이중 유형 입력을 수락하고 긴 유형 결과를 반환합니다. |
14 | DoubleUnaryOperator ; double applyAsDouble (이중 피연산자); |
double 유형의 매개 변수를 허용하고 반환 값 유형도 double입니다. |
15 | Function<T,R>; R apply(T t); |
接受一个输入参数,返回一个结果 |
16 | IntBinaryOperator; int applyAsInt(int left, int right); |
接受两个参数同为类型int,返回值类型也为int |
17 | IntConsumer; void accept(int value); |
接受一个int类型的输入参数,无返回值 |
18 | IntFunction<R>; R apply(int value); |
接受一个int类型输入参数,返回一个结果 |
19 | IntPredicate; boolean test(int value); |
接受一个int输入参数,返回一个布尔值的结果 |
20 | IntSupplier; int getAsInt(); |
无参数,返回一个int类型结果 |
21 | IntToDoubleFunction; double applyAsDouble(int value); |
接受一个int类型输入,返回一个double类型结果 |
22 | IntToLongFunction; long applyAsLong(int value); |
接受一个int类型输入,返回一个long类型结果 |
23 | IntUnaryOperator; int applyAsInt(int operand); |
接受一个参数同为类型int,返回值类型也为int |
24 | LongBinaryOperator; long applyAsLong(long left, long right); |
接受两个参数同为类型long,返回值类型也为long |
25 | LongConsumer; void accept(long value); |
接受一个long类型的输入参数,无返回值 |
26 | LongFunction<R>; void accept(long value); |
接受一个long类型输入参数,返回一个结果 |
27 | LongPredicate; boolean test(long value); |
接受一个long输入参数,返回一个布尔值类型结果 |
28 | LongSupplier; long getAsLong(); |
无参数,返回一个结果long类型的值 |
29 | LongToDoubleFunction; double applyAsDouble(long value); |
接受一个long类型输入,返回一个double类型结果 |
30 | LongToIntFunction; int applyAsInt(long value); |
接受一个long类型输入,返回一个int类型结果 |
31 | LongUnaryOperator; long applyAsLong(long operand); |
接受一个参数同为类型long,返回值类型也为long |
32 | ObjDoubleConsumer<T>; void accept(T t, double value); |
接受一个object类型和一个double类型的输入参数,无返回值 |
33 | ObjIntConsumer<T>; void accept(T t, int value); |
接受一个object类型和一个int类型的输入参数,无返回值 |
34 | ObjLongConsumer<T>; void accept(T t, long value); |
接受一个object类型和一个long类型的输入参数,无返回值 |
35 | Predicate<T>; boolean test(T t); |
接受一个输入参数,返回一个布尔值结果 |
36 | Supplier<T>; T get(); |
无参数,返回一个结果 |
37 | ToDoubleBiFunction<T,U>; double applyAsDouble(T t, U u); |
接受两个输入参数,返回一个double类型结果 |
38 | ToDoubleFunction<T>; double applyAsDouble(T value); |
接受一个输入参数,返回一个double类型结果 |
39 | ToIntBiFunction <T, U> ; int applyAsInt (T t, U u); |
두 개의 입력 매개 변수를 받아들이고 int 유형 결과를 반환합니다. |
40 | ToIntFunction <T> ; int applyAsInt (T 값); |
입력 매개 변수를 받아들이고 int 유형 결과를 반환합니다. |
41 | ToLongBiFunction <T, U> ; long applyAsLong (T t, U u); |
두 개의 입력 매개 변수를 허용하고 긴 유형 결과를 리턴합니다. |
42 | ToLongFunction <T> ; long applyAsLong (T 값); |
입력 매개 변수를 허용하고 긴 유형 결과를 리턴합니다. |
43 | UnaryOperator <T> ; 继承 : Function <T, T> 확장 ; R 적용 (T t); |
T 유형의 매개 변수를 허용하고 반환 값 유형도 T입니다. |
44 | 위는 java8 이후의 기능적 인터페이스입니다. |
|
java8과 함께 제공되는 기능 인터페이스를 사용하기 만하면됩니다.
코드는 다음을 반영합니다.
java8과 함께 제공되는 기능 인터페이스 사용
public static void main(String[] args) {
String string = MethodCiteFunction.supplier(() -> "接受一个空参,返回一个String对象");
System.out.println(string);
// 空参,返回一个person对象
Person person = MethodCiteFunction.supplier(() -> new Person());
// 方法引用,空参返回一个person对象
Person person2 = MethodCiteFunction.supplier(Person::new);
}
/**
* Supplier<T> 无参,返回一个泛型类型的对象
* @param supplier
* @return
*/
public static <T>T supplier(Supplier<T> supplier) {
return supplier.get();
}