이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 24226|회답: 1

[출처] 자바에서 흔히 사용되는 기능 인터페이스(디리게이트)에 대한 상세한 설명

[링크 복사]
게시됨 2021. 9. 16. 오전 9:28:21 | | | |
JDK 1.8 API에는 Comparator나 Runnable 인터페이스와 같은 내장 기능 인터페이스가 많이 포함되어 있는데, 이는 람다에서 사용할 수 있도록 @FunctionalInterface 주석을 추가합니다. 이제 함수의 공통 함수 도입부에서 진정으로 이해해 봅시다.

이름묘사
소비자소비자< T >T개의 객체를 수신하지만 값을 반환하지 않음
술어술어< T >T 객체를 받고 불리언을 반환합니다
기능기능< T, R >T 객체를 수신하고 R 객체를 반환합니다
공급 업체공급자< T >값을 받아들이지 않고 T 객체(예: 식물)를 제공하세요
유니어오퍼레이터유니어오퍼레이터T 객체를 수신하고 T 객체를 반환합니다
이진 연산자이진 연산자두 개의 T 객체를 받고 T 객체를 반환합니다


FunctionalInterface로 분류된 인터페이스는 함수형 인터페이스라고 하며, 하나의 사용자 지정 메서드만 가질 수 있지만 객체 클래스에서 상속받은 메서드를 포함할 수 있습니다. 인터페이스에 하나의 메서드만 있으면 컴파일러는 이를 함수형 인터페이스로 간주합니다. 기능적 인터페이스인지 여부와 상관없이, 다음 사항들을 주목해야 합니다:


  • 주석은 "추상 메서드는 하나뿐이다"라는 인터페이스에서만 표시할 수 있습니다.
  • JDK8 인터페이스의 정적 및 기본 메서드는 추상적인 메서드가 아닙니다.
  • 인터페이스는 기본적으로 java.lang.Object를 상속하므로, 인터페이스가 선언이 객체 내 메서드를 덮어쓰는 것으로 표시되면 추상 메서드로 간주되지 않습니다.
  • 주석은 필수가 아니며, 인터페이스가 "함수 인터페이스"의 정의를 충족하면 주석이 추가되든 없든 영향을 받지 않습니다. 게다가 주석 덕분에 컴파일러가 더 잘 확인할 수 있습니다. 비기능적인 인터페이스를 작성했지만 @FunctionInterface을 추가하면 컴파일러가 오류를 보고합니다.
  • 하나의 인터페이스에서 두 개의 사용자 지정 메서드를 정의하면 '@FunctionalInterface' 주석이 부당합니다; FunctionalInterfaceTest는 기능적 인터페이스 오류가 아닙니다.


java.util.function Java 함수형 프로그래밍을 지원하는 여러 클래스를 포함하고 있으며, 이 패키지의 함수형 인터페이스는 다음과 같습니다:

일련번호
인터페이스 및 설명
1바이컨슈머<T,U>
두 입력 매개변수를 수용하고 결과를 반환하지 않는 행동을 나타냅니다
2BiFunction<T, U, R>
두 개의 입력 매개변수를 수용하고 결과를 반환하는 메서드를 나타냅니다
3이진 연산자<T>
는 동일한 유형의 두 연산자에 작용하는 행동을 나타내며, 동일한 유형의 연산자의 결과를 반환합니다
4이중술어<T,U>
2매개변수 불리언 값 방법을 나타냅니다
5불리언 공급업체
불 값 결과의 제공자를 나타낸다
6소비자<T>
입력 매개변수를 받아들이고 아무것도 반환하지 않는 연산을 나타냅니다
7더블바이너리 연산자
는 두 개의 이중 값 연산자에 작용하는 행동을 나타내며, 이중 값의 결과를 반환합니다.
8더블 컨슈머
더블 값 매개변수를 받아들이고 결과를 반환하지 않는 행동을 나타냅니다.
9더블 기능<R>
이 메서드는 이중 값 매개변수를 받아들이고 결과를 반환하는 메서드를 나타냅니다.
10이중 술어
이중 값 매개변수를 가진 불리언 값 방법을 나타냅니다
11더블서더
이중 가치 구조의 제공자를 나타냅니다
12더블투 인터페이스
더블 타입 입력을 받아들이고 int 타입 결과를 반환합니다.
13더블투롱함수
더블 타입 입력을 받아들이고 롱 타입 결과를 반환합니다
14더블유너리 연산자
같은 타입의 매개변수를 double로 받아들이면, 반환 값 타입도 double입니다.
15기능<T,R>
입력 매개변수를 받아들이고 결과를 반환합니다.
16IntBinaryOperator
int 타입과 반환 값 int 파라미터 모두를 받아들입니다.
17인터컨슈머
반환값이 없는 int 타입의 입력 매개변수를 받아들입니다.
18IntFunction<R>
정수형 입력 매개변수를 받아들이고 결과를 반환합니다.
19IntPredicate
: 정수(int) 입력 매개변수를 받아들이고 불리언 결과를 반환합니다.
20IntSupplier
매개변수가 없고, 정수형 결과를 반환합니다.
21IntToDoubleFunction
int 타입 입력을 받아들이고 더블 타입 결과를 반환합니다.
22IntToLongFunction
int 타입 입력을 받아들이고 긴 타입 결과를 반환합니다.
23IntUnaryOperator
int 타입의 매개변수를 받아들이고, 값 타입도 int입니다.
24롱바이너리 연산자
긴 타입과 반환 값 타입 모두 long을 받아들입니다.
25롱컨슈머
반환값이 없는 입력 매개변수 유형을 long로 받아들입니다.
26롱함수<R>
긴 타입 입력 매개변수를 받아들이고 결과를 반환합니다.
27롱술어
R은 긴 입력 매개변수를 받아들이고 불리언 타입 결과를 반환합니다.
28롱스트레이더
매개변수가 없으며, 긴 타입의 결과를 반환합니다.
29롱투더블 함수
긴 타입 입력을 받아들이고 이중 타입 결과를 반환합니다.
30롱토 기능
긴 타입 입력을 받아들이고 정수형 결과를 반환합니다.
31롱유너리 연산자
long과 같은 타입의 매개변수를 받아들이고, 타입 의 값도 long을 반환합니다.
32ObjDoubleConsumer<T>
객체 타입과 이중 타입 입력 매개변수를 받아들이고, 반환 값이 없습니다.
33ObjIntConsumer<T>
객체 타입과 정수형 입력 매개변수를 반환 값 없이 받아들입니다.
34ObjLongConsumer<T>
객체 타입과 긴 타입 입력 매개변수를 값을 반환하지 않고 수용합니다.
35술어<T>
입력 매개변수를 받아들이고 불리언 결과를 반환합니다.
36공급 업체<T>
매개변수가 없으면 결과를 반환합니다.
37ToDoubleBiFunction<T,U>
두 개의 입력 매개변수를 수용하며 이중 타입 결과를 반환합니다
38ToDoubleFunction<T>
입력 매개변수를 받아들이고 이중 타입 결과를 반환합니다
39ToIntBiFunction<T,U>
두 개의 입력 매개변수를 받아들이고 정수형 결과를 반환합니다.
40ToIntFunction<T>
입력 매개변수를 수락하고 정수형 결과를 반환합니다.
41ToLongBiFunction<T,U>
두 가지 입력 매개변수를 받아들이고 긴 타입 결과를 반환합니다.
42ToLongFunction<T>
입력 매개변수를 수락하고 긴 타입 결과를 반환합니다.
43유니어오퍼<T>레이터
타입 T의 파라미터를 받아들이고 타입 T의 값을 반환합니다.


나는Java의 함수 인터페이스는 .NET/C#의 delegate입니다, 메서드를 매개변수로 전달합니다.

C# 대의자 소개 (delegate, Action, Func, 술어)
https://www.itsvse.com/thread-4658-1-1.html

기능 공통 방법 및 실천

//将Function对象应用到输入的参数上,然后返回计算结果。
R 적용(T t);

Function< T, R> T 객체를 수신하고, R 객체를 반환하며, 수신 및 반환 객체는 하나뿐이지만, 튜플과 결합하면 여러 입력 및 반환 값이 가능하며, 다음을 참조하십시오:

자바에서의 튜플 사용
https://www.itsvse.com/thread-10055-1-1.html

예시 1: 두 값을 주고받아 합산합니다

평범한 글씨와 람다 표현식을 사용할 수 있으며, 코드는 다음과 같습니다:





예시 2:

andThen 방법



컴포지 메서드



전체 코드



반환 결과



(끝)




이전의:여러 동일한 서비스 이름에 대한 Java FeignClient Interface 예외 솔루션
다음:Maven 프로젝트 \target\classes\META-INF\MANIFEST. MF (시스템...
게시됨 2021. 9. 19. 오후 7:34:22 |
자바도 찾아봤지만 실제로 사용되지는 않았습니다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com