개념: 메소드 참조를 사용하면 메소드를 실행하지 않고도 참조할 수 있습니다.
람다 표현식과의 관계: 둘 다 호환되는 기능 인터페이스로 구성된 대상 유형 컨텍스트가 필요합니다.
함수형 인스턴스: 메서드 참조는 평가 시 함수형 인터페이스의 인스턴스를 생성합니다.
정적 메소드에 대한 참조
클래스 이름과 메소드는 JDK 8에서 삽입되는 이중 콜론(::)으로 구분됩니다.
대상 유형과 호환되는 모든 곳에서 사용할 수 있습니다.
정적 메소드 참조 예
기능적 인터페이스:
이름: IntPredicate
메소드: test(int 값)
매개변수: 정수.
반환: 부울(정수 값에 대한 조건 테스트).
보조수업:
이름: MyIntPredicates
구현된 정적 메소드:
isPrime(): 숫자가 소수인지 확인합니다.
isEven(): 숫자가 짝수인지 확인합니다.
isPositive(): 숫자가 양수인지 확인합니다.
주요 방법:
이름: numTest()
매개변수:
IntPredicate.
인터페이스에 대한 참조
테스트 중인 정수입니다.
실행:
main() 메서드에서는 numTest()를 사용하여 세 가지 테스트를 수행합니다.
각 테스트마다 특정 메소드 참조(isPrime, isEven, isPositive)가 실행 인수로 전달됩니다.
// 정적 메서드에 대한 참조를 보여줍니다.
//
로 작동하는 숫자 술어에 대한 기능적 인터페이스
// 정수 값.
인터페이스 IntPredicate {
부울 테스트(int n);
}
// 이 클래스는 정수를 확인하는 세 가지 정적 메서드를 정의합니다
// 어떤 조건과 관련하여.
클래스 MyIntPredicates {
// 숫자가 소수일 때 true를 반환하는 정적 메서드입니다.
static boolean isPrime(int n) {
if(n
for(int i=2; i <= n/i; i ) {
if((n % i) == 0)
false를 반환합니다.
}
true를 반환합니다.
}
// 짝수일 때 true를 반환하는 정적 메소드입니다.
정적 부울 isEven(int n) {
반환 (n % 2) == 0;
}
// 숫자가 양수일 때 true를 반환하는 정적 메서드입니다.
static boolean isPositive(int n) {
n > 0;
}
}
클래스 MethodRefDemo {
// 이 메소드는 해당 유형으로 기능적 인터페이스를 갖습니다
// 첫 번째 매개변수. 따라서
에 대한 참고자료를 받으실 수 있습니다.
// 생성된 인터페이스를 포함하여 이 인터페이스의 모든 인스턴스
// 메소드 참조로
static boolean numTest(IntPredicate p, int v) {
return p.test(v);
}
공개 정적 무효 메인(문자열 인수[])
{
부울 결과;
// 여기서는 isPrime 메소드에 대한 참조가 numTest()에 전달됩니다.
결과 = numTest(MyIntPredicates::isPrime, 17);
if(result) System.out.println("17은 소수입니다.");
// 그런 다음 isEven 메소드에 대한 참조가 사용됩니다.
결과 = numTest(MyIntPredicates::isEven, 12);
if(result) System.out.println("12는 짝수입니다.");
// 이제 isPositive 메소드에 대한 참조가 전달됩니다.
결과 = numTest(MyIntPredicates::isPositive, 11);
if(result) System.out.println("11은 양수입니다.");
}
}
정적 메서드 isPrime()에 대한 참조는 numTest() 메서드에 인수로 전달됩니다.
isPrime() 메소드는 IntPredicate 기능 인터페이스와 호환됩니다.
MyIntPredicates::isPrime 표현식은 isPrime()이 IntPredicate의 test() 메서드를 구현하는 참조를 생성합니다.
numTest()에 대한 다른 호출은 동일한 호환성 및 작동 원리를 따릅니다.
부울 서명 test(int n)가 있는 모든 메소드는 IntPredicate 인터페이스에 대한 참조로 사용될 수 있습니다.
위 내용은 메소드 참조의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!