기능 인터페이스는 하나의 추상 방법 만 있지만 여러 번의 비 임금 방법을 가질 수있는 인터페이스입니다.
기능적 인터페이스는 람다 표현식으로 암시 적으로 변환 될 수 있습니다.
기능적 인터페이스는 기존 기능으로 Lambdas를 지원할 수 있습니다.
소개하다
기능 인터페이스는 실제로 추상 인터페이스 클래스입니다. Java 8 이전에는 다음 기능 인터페이스가 발견되었습니다.
java.lang.runnablejava.util.concurrent.callablejava.util.comparator
등...
사용 방법
실제로, 위에서 언급 한 인터페이스 클래스는 FunctionalInterface 주석으로 만 수정되며 Java의 기능 인터페이스가됩니다. 예를 들어, JDK의 호출 가능한 인터페이스 정의입니다
@functionalInterFacePublic Interface Callable <v> {v Call ()은 예외를 던지기;}그렇게 간단합니다.
이제 Java 8에 추가 된 새로운 기능 인터페이스에 대해 이야기 해 봅시다. 정의는 다음과 같습니다.
// t는 들어오는 매개 변수입니다. // r은 반환 매개 변수 @functionalInterFacePublic Interface 함수 <t, r> {r apply (t t); Default <v> function <v, r> compose (function <? super v,? extends t> extends {objects.requirenonnull (이전); return (v v) -> apply (vere.apply (v));} intubl (function <? super r,? extends v> extends) After.Apply (apply (t)); static <t> function <t, t> identity () {return t-> t};C 언어 (개인 의견)의 함수 포인터로 이해할 수 있습니다.
실제로 사용하면 적용 방법이 널리 사용됩니다. Compose/andthen은 주로 두 가지 이상의 함수 인터페이스 및 실행 시퀀스가 수행되는 시나리오에서 주로 사용됩니다.
특정 비즈니스 코드에서는 일반적으로 Bifuncton/공급 업체와 함께 사용합니다. BIFTUNCER는 2 개의 매개 변수를 지원하고 기능은 하나의 매개 변수 만 지원합니다. 공급 업체는 특정 필요한 값을 저장하고 얻을 수 있습니다.
예
일반적으로 작업하는 코드에 대한 참조. 이 예제는 주로 코드가 부풀어 오르는 경우/다른 판단 조건을 피합니다. 동시에, 동일한 비즈니스 로직을 함수 인터페이스에서 추상화하여 여러 위치에서 코드를 재사용 할 수 있습니다. 특정 코드는 다음과 같습니다.
함수 <객체, integer> actionTest1 = (Object) -> {// logic return 0;}; function <객체, integer> actionTest2 = (Object) -> {// logic return 0;}; public supplier <map <intger, function <actionupplier = () -> {object <객체, integer, integer> Hashmap <> (); maps.put (1, ActionTest1); maps.put (2, actiontest2); return maps;}; // public void test (int type, 객체 개체) {optional.ofnullable (actionupplier.get (). get (type)). ifpresent (x-> x.apply (v, object)); // if/else logic if (type == 1) {// test1 logic} else if (type == 2) {// test2 logic}}요약
개인적으로, 나는 비즈니스 논리 지점에 대한 더 많은 판단이있는 시나리오에서는 기능을 사용하기에 더 적합하며 다음과 같은 이점이 있다고 생각합니다.
기능 인터페이스 예제
술어 <t> 인터페이스는 입력 매개 변수 t를 수용하고 부울 결과를 반환하는 기능 인터페이스입니다.
이 인터페이스에는 술어를 다른 복잡한 논리 (예 : : vers, 또는 non)로 결합하는 다양한 기본 메소드가 포함되어 있습니다.
이 인터페이스는 객체를 테스트하는 데 사용됩니다.
다음 예제 (java8tester.java)를 통해 기능 인터페이스 술어 <t>의 사용을 이해할 수 있습니다.
java8tester.java 파일 import java.util.arrays; import java.util.list; import java.util.function.predicate; 공개 클래스 java8tester {public static void main (String args []) {list <integer> list = arrays.aslist (1, 2, 3, 4, 5, 6, 7, 8, 9); // predicate <integer> precticate = n-> true // n은 아리카트 인터페이스에 인수를 전달하는 테스트 방법입니다. // 매개 변수를 전달합니다 n eval (list, n-> true); // predicate <integer> predict1 = n-> n%2 == 0 // n은 매개 변수를 술어 인터페이스로 전달하는 테스트 방법입니다. // n%2가 0이면 0 테스트 메소드가 true system.out.out.println ( "모든 짝수 :"); 평가 (목록, n-> n%2 == 0); // predicate <integer> predict2 = n-> n> 3 // n은 매개 변수를 술어 인터페이스로 전달하는 테스트 방법입니다. // n이 3보다 큰 경우 n 테스트 방법을 반환합니다. 평가 (목록, n-> n> 3); } public static void eval (list <integer> 목록, 술어 <integer> predict) {for (integer n : list) {if (presctice.test (n)) {system.out.println (n + ""); }}}}위의 스크립트를 실행하면 출력 결과는 다음과 같습니다.
$ javac java8tester.java
$ java java8tester
모든 데이터 출력 :
1
2
3
4
5
6
7
8
9
모든 짝수 숫자를 출력합니다.
2
4
6
8
3보다 큰 모든 숫자를 출력합니다.
4
5
6
7
8
9
요약
위는 Java 8 기능 기능 인터페이스 및 편집기가 소개 한 기능 인터페이스 예제입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!