자바 반사 메커니즘을 통해 어떤 방법을 동적으로 호출하는 총결(추천)
public Object invokeMethod(String className, String methodName,
Object[] args) throws Exception{
Class ownerClass = Class.forName(className);
Object owner = ownerClass.newInstance();
Class[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Method method = ownerClass.getMethod(methodName, argsClass);
return method.invoke(owner, args);
}
그러나 우리는 실제 응용에서 전입된 실삼과 호출될 방법의 형삼이 완전히 일치하지 않을 수도 있다.예를 들어struts1.x의 어떤 방법이 호출될 때 HttpServletResponse 형식의 매개 변수가 있습니다.
우리는tomcat에서request 대상의 실례는 사실:org이다.apache.catalina.connector.ResponseFacade
그것은 인터페이스를 실현했다:javax.servlet.http.HttpServletResponse;
만약에 우리가 웹 용기에 있는request 대상을 하나의 매개 변수로 삼아 위의 코드 세션에 전송한다면 문제가 있을 것이다. 이때 우리의 처리 방법은 이렇다. action에서 방법은 다음과 같다.
public ActionForward query(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
response는 일반적으로 네 번째에 위치합니다. 그러면 상기 코드를 수정합니다.
손잡이
for (int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
다음으로 변경:
for (int i = 0, j = args.length; i < j; i++) {
if(i == 3){
argsClass[i] = HttpServletResponse.class;
}
else{
argsClass[i] = args[i].getClass();
}
}
이상의 자바 반사 메커니즘을 통해 어떤 방법을 동적으로 호출하는 총결(추천)은 바로 편집자가 여러분에게 공유한 모든 내용입니다. 여러분께 참고가 되고 저희를 많이 사랑해 주시기 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.