2013-01-24 3 views
2

가능한 중복 : m1, m2, m3, ...이 같은의 이름으로 메소드를 호출

:
How do I invoke a Java method when given the method name as a string?

I (10 개)라는 이름의 메소드가

public void m1(){ 
.. 
} 

'for'루프에서 문자열로 어떻게 호출합니까?

나는이 작업을 수행 할 수 : this 객체에

for (int i=1;i<11;i++){ 
    invoke('m'+i); 
} 
+1

"Reflection"이라는 기능을 사용해야합니다. –

+0

이것은 실제로 중복되지 않습니다. 간단한 대답은 사용 반사이지만이 같은 디자인은 잘못되었습니다. Java가 메소드의 서명을 정의하기 위해 인터페이스를 사용하고 메소드가 호출하는 메소드를 호출하는 인터페이스를 구현하는 객체를 반복하는 방식으로 Java가 클로저 형태의 최상위 메소드를 가져올 때까지해야합니다. –

답변

4

이 작업을 수행하려면 reflection을 사용해야합니다.

Method method = getClass().getMethod(methodName); 
    method.invoke(this); 

따라서 메서드 이름을 배열에 저장하고이 코드 조각을 사용하여 해당 메서드를 하나씩 호출해야합니다.

+0

그냥 추가하고 싶다면 매개 변수를 추가하려면 getmethod()의 클래스를 두 번째 매개 변수로 추가하고 호출 매개 변수를 추가하십시오.()를 두 번째 매개 변수로 사용합니다. – Wops

-1

를 사용하여 자바 반사.

+0

이 질문에 대한 답변을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. –

+0

특정 지침, 힌트 및 특정 답변이 아닌 목적을 제공하는 것이 목적입니까? 제 말은, 물고기를 잡는 방법을 사람에게 가르쳐 주지만, 이미 잡힌 물고기는주지 말아주세요. – GeorgeVremescu

+0

당신의 대답은 논평이고 진짜 대답이 아닌 것 같습니다. 당신이 좋은 대답을주고 싶다면 좋은 설명과 적절한 형식화 된 대답을 써주세요. –

0

reflection과 같이 할 수 있습니다.

그러나 사용 사례에 관심이 있습니다. 응용 프로그램을 리팩토링하는 것이 가능하여 리플렉션을 사용하는 것이 불필요합니다.

관련 문제