2009-10-26 10 views
0

수퍼 클래스를 인스턴스의 하위 클래스가있는 매개 변수로 사용하는 메서드를 호출하려고합니다.수퍼 클래스를 사용하여 메서드를 호출하는 방법

public String methodtobeinvoked(Collection<String> collection); 

지금은 그런 방법 예외 매개 변수를 취할 수있는 방법이 존재하더라도

SomeObject.methodtobeinvoked(java.util.ArrayList); 

실패합니다

List<String> list = new ArrayList(); 
String methodName = "methodtobeinvoked"; 
... 
method = someObject.getMethod(methodName,new Object[]{list}); 

를 통해 호출합니다.

이 문제를 해결하는 가장 좋은 방법에 대한 의견이 있으십니까?

+1

과부화가 필요하지 않습니다. 내 업데이 트를 한번보세요. – ChssPly76

답변

4

당신은 getMethod() 호출에 매개 변수를 유형를 지정해야합니다

method = someObject.getMethod("methodtobeinvoked", Collection.class); 

개체 배열이 필요하지 않습니다; java 1.5는 varargs를 지원합니다.

업데이트 (댓글 기준)

그래서 당신은 같은 작업을 수행해야합니다

Method[] methods = myObject.getClass().getMethods(); 
for (Method method : methods) { 
    if (!method.getName().equals("methodtobeinvoked")) continue; 
    Class[] methodParameters = method.getParameterTypes(); 
    if (methodParameters.length!=1) continue; // ignore methods with wrong number of arguments 
    if (methodParameters[0].isAssignableFrom(myArgument.class)) { 
    method.invoke(myObject, myArgument); 
    } 
} 

위는 하나의 인수를 공공 방법을 확인; 필요에 따라 업데이트하십시오.

+0

호출의 요점은 즉석에서 지정된 메소드를 호출 할 수 있기를 원한다는 것입니다. 즉, 필자는 반드시 param 유형을 필요로하지 않는다. method = someObject.getMethod (variableForMethodName, instanceOfsomeParameter); –

+1

그건 단순히 반사가 작동하는 방법이 아닙니다. –

+1

@Sheldon - 매개 변수 유형을 모르는 경우 무엇을 알고 있습니까? 메소드 이름 만? 이 경우'Class.getMethods()'를 사용하여 문제의 클래스의 ** 모든 ** public 메소드를 반환하고 수동으로 반복하고 필요한 클래스를 호출 할 수 있습니다. 그러나 매개 변수 유형을 모르는 경우 오버로드 된 메서드 (예 : 같은 이름이지만 다른 인수가있는 메서드)를 구별 할 수는 없다는 것을 알고 있어야합니다. – ChssPly76

관련 문제