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
반응형
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
중첩 된 JavaScript 개체 키의 존재 여부 테스트 (0) | 2021.11.03 |
---|---|
Java Hashmap : Value에서 Key를 얻는 방법 (0) | 2021.11.03 |
Jackson JSON 및 Hibernate JPA 문제가있는 무한 재귀 (0) | 2021.11.02 |
자바 스크립트 private 메서드 (0) | 2021.11.01 |
Kotlin 소스 파일을 자바 소스 파일로 변환하는 방법 (0) | 2021.11.01 |