Java에서 매개 변수로 함수를 전달하는 방법
Hassan Saeed
2023년10월12일
이 튜토리얼에서는 Java의 다른 함수에 매개 변수로 함수를 전달하는 방법에 대해 설명합니다.
Java에서 함수를 매개 변수로 전달하는 두 가지 다른 방법에 대해 설명합니다.
인터페이스의 인스턴스를 사용하여 Java에서 매개 변수로 함수 전달
이 메소드에서는 해당 메소드의 스켈레톤 만 포함하는 인터페이스를 구현하는 클래스에서 매개 변수로 전달해야하는 함수를 작성해야합니다.
아래 예는이를 설명합니다.
매개 변수로 전달할 함수 골격을 포함하는 Callable
인터페이스를 정의합니다. 다음으로 Callable
을 구현하고 함수의 전체 정의를 포함하는 클래스를 정의합니다. 이 함수는newFunction(Callable callable, int param)
과 같은 다른 함수에 전달할 수 있습니다. 여기서callable
은Callable
인터페이스의 인스턴스를 나타냅니다.
전체 작동 예제가 아래 코드에 나와 있습니다.
interface Callable {
public void call(int param);
}
class Test implements Callable {
public void call(int param) {
System.out.println(param);
}
}
public class HelloWorld {
public static void invoke(Callable callable, int param) {
callable.call(param);
}
public static void main(String[] args) {
Callable cmd = new Test();
invoke(cmd, 10);
}
}
출력:
> 10
java.lang.reflect.Method
를 사용하여 Java에서 매개 변수로 함수 전달
함수outerFunction
에 매개 변수로 전달해야하는functionToPass
함수가 있습니다.
functionToPass
를 정의하는 방법에는 차이가 없습니다. 그러나outerFunction
을 정의하려면outerFunction(Object object, Method method, param1, param2, ...)
과 같은 특정 구문을 따라야합니다.
아래 예를 살펴보십시오.
import java.lang.reflect.Method;
public class Main {
public void functionToPass(String message) {
String[] split = message.split(" ");
for (int i = 0; i < split.length; i++) System.out.println(split[i]);
}
public void outerFunction(Object object, Method method, String message) throws Exception {
Object[] parameters = new Object[1];
parameters[0] = message;
method.invoke(object, parameters);
}
public static void main(String[] args) throws Exception {
Class[] parameterTypes = new Class[1];
parameterTypes[0] = String.class;
Method functionToPass = Main.class.getMethod("functionToPass", parameterTypes[0]);
Main main = new Main();
main.outerFunction(main, functionToPass, "This is the input");
}
}
다음은 동일한 방법의 또 다른 예입니다. 반환 값도있는 함수를 만들고 있습니다.
import java.lang.reflect.Method;
public class Main {
public int functionToPass(String message) {
return message.length();
}
public void outerFunction(Object object, Method method, String message) throws Exception {
Object[] parameters = new Object[1];
parameters[0] = message;
System.out.println(method.invoke(object, parameters));
}
public static void main(String[] args) throws Exception {
Class[] parameterTypes = new Class[1];
parameterTypes[0] = String.class;
Method functionToPass = Main.class.getMethod("functionToPass", parameterTypes[0]);
Main main = new Main();
main.outerFunction(main, functionToPass, "This is the input");
}
}