인스턴스 상세 Java8 함수식 인터페이스
public class Test1 {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
list.forEach(new Consumer<Integer>() {
@Override
public void accept(Integer integer) {
System.out.println(integer);
}
});
}
}
이 프로그램은 간단합니다. 우선 Integer 형식의 집합을 초기화하고 컨트롤러에 모든 요소를 출력합니다.그 중에서 우리는 forEach 방법이 Java8에 새로 추가된 기본 방법이라는 것을 알아차렸다.
public interface Iterable<T> {
.
.
.
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
}
이것은 Iterable 인터페이스에 선언되고 키워드 default에 의해 수정됩니다.이렇게 하면 모든 이 인터페이스의 하위 유형은forEach 방법의 실현을 계승할 수 있기 때문에List 인터페이스는Iterable의 간접 하위 인터페이스이기 때문에 이 기본 방법도 계승되었다.Java8은 이러한 교묘한 방식으로 인터페이스의 기능을 확장할 뿐만 아니라 오래된 버전도 호환한다.다음에 forEach의 실현을 분석하고 우선consumer 유형의 매개 변수 action을 받아들여 비공식 판단을 한 다음에 현재 모든 요소를 action의accept 방법으로 처리한다.그럼 Consumer는 또 뭐야? 원본 봐.
@FunctionalInterface
public interface Consumer<T> {
/**
* Performs this operation on the given argument.
*
* @param t the input argument
*/
void accept(T t);
.
.
.
}
@FunctionalInterface에 의해 수식되고 전형적인 함수식 인터페이스가 있는 인터페이스ok, 이제 우리는 forEach가 수신한Consumer 형식의 매개 변수는 함수식 인터페이스이고 인터페이스에서 유일한accept 추상적인 방법으로 매개 변수를 수신하고 값을 되돌려 주지 않는다는 것을 알고 있습니다.그러면 이전 문장을 통해 우리는 함수식 인터페이스 유형을 만드는 실례 중 하나가 Lambda 표현식을 사용하기 때문에 맨 위의 프로그램을 개조할 수 있다는 것을 알았다
public class Test1 {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
//Lambda
list.forEach(item -> System.out.println(item));
}
}
이 lambda 표현식 item-> 시스템.out.println (item) 은 매개 변수가 값을 되돌려 주지 않고 accept 방법의 서명 요구에 부합되며 컴파일이 통과됩니다.즉, 만약lambda표현식을 사용하여 함수식 인터페이스 실례를 만들면, 이 lambda표현식의 삽입과 반환은 이 함수식 인터페이스에서 유일한 추상적인 방법에 부합되는 방법으로 서명해야 한다.
다음에 다시 절차를 개조할 것이다
public class Test1 {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
//
list.forEach(System.out::println);
}
}
아웃 뒤에 짝퉁이 두 개 있는 걸 봤어요. 어쨌든 그때 제가 혼란스러웠어요...이것이 바로 함수식 인터페이스 실례 두 번째 창설 방식입니다. 방법 인용 방법이 인용한 문법은 대상입니다. 방법명:마찬가지로 방법 인용 방식을 사용하여 함수식 인터페이스를 만드는 실례도 방법 서명의 정의를 준수해야 합니다. 여기 println 방법 원본을 보십시오
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
매개 변수를 수신하고 값을 되돌려 주지 않습니다. 컴파일이 통과되었습니다.마지막으로 함수식 인터페이스를 만드는 마지막 방법, 세 번째 방식: 구조 방법 인용, 프로그램 계속 변경
public class Test1 {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
//
list.forEach(Test1::new);
}
Test1(Integer i){
System.out.println(i);
}
}
구조 방법 인용 문법: 클래스 이름::new우리는 Test1에 구조 방법을 새로 추가했습니다. 이 구조 방법은 매개 변수를 수신하고 값을 되돌려 주지 않으며 컴파일이 통과되었습니다.(전시 구조 방법에만 인용하는 용법)
이전 문장과 결합하여 함수식 인터페이스 유형을 만드는 세 가지 방식을 요약할 수 있다.
1. lambda 표현식
2. 메소드 참조
3. 구조 방법 인용
주의: 어떤 방식이든 추상적인 방법에 부합되는 서명을 해야 한다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 8 새 기능 내장 함수식 인터페이스 상세 정보Java 8 새로운 기능 내장 함수식 인터페이스 이전의 블로그 람다 표현식에서 자바 8이 제공하는 함수식 인터페이스를 언급한 적이 있다.이 글에서 자바 8의 가장 기본적인 함수식 인터페이스를 소개할 것이다 방법의 인...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.