프로그래밍 언어/JAVA

Java에서 함수를 매개 변수로 전달하는 방법

Rateye 2021. 11. 2. 10:29
728x90
반응형
질문 : Java에서 함수를 매개 변수로 전달하는 방법은 무엇입니까?

Java에서 함수를 다른 함수의 인수로 어떻게 전달할 수 있습니까?

답변

Java 8 이상

Java 8+ 람다 식을 사용하는 경우, 단일 추상 메서드 ( SAM 유형 이라고도 함) 만있는 클래스 또는 인터페이스가있는 경우, 예를 들면 다음과 같습니다.

public interface MyInterface {
    String doSomething(int param1, String param2);
}

그런 다음 MyInterface가 사용되는 모든 곳에서 람다 식을 대체 할 수 있습니다.

class MyClass {
    public MyInterface myInterface = (p1, p2) -> { return p2 + p1; };
}

예를 들어 새 스레드를 매우 빠르게 만들 수 있습니다.

new Thread(() -> someMethod()).start();

메서드 참조 구문 을 사용하여 더욱 깔끔하게 만드세요.

new Thread(this::someMethod).start();

람다식이 없으면 마지막 두 가지 예는 다음과 같습니다.

new Thread(new Runnable() { someMethod(); }).start();

Java 8 이전 버전

Callable 과 같은 인터페이스 내에서 '포장'한 다음 Callable을 전달하는 것입니다.

public T myMethod(Callable<T> func) {
    return func.call();
}

이 패턴을 명령 패턴이라고 합니다.

특정 용도에 맞는 인터페이스를 만드는 것이 가장 좋습니다. callable로 이동하기로 선택한 경우 위의 T를 String과 같은 예상되는 반환 값 유형으로 대체합니다.

아래 귀하의 의견에 대해 다음과 같이 말할 수 있습니다.

public int methodToPass() { 
        // do something
}

public void dansMethod(int i, Callable<Integer> myFunc) {
       // do something
}

그런 다음 익명의 내부 클래스를 사용하여 호출하십시오.

dansMethod(100, new Callable<Integer>() {
   public Integer call() {
        return methodToPass();
   }
});

이것은 '속임수'가 아닙니다. 함수 포인터에 해당하는 Java의 기본 개념입니다.

출처 : https://stackoverflow.com/questions/4685563/how-to-pass-a-function-as-a-parameter-in-java
728x90
반응형