2013-05-29 2 views
1

Seam 구성 요소에서 전용 메서드를 호출 할 수있는 방법이 있습니까? 다음 코드를 사용했지만 선언 된 메서드에 개인 메서드가 없다는 것을 알았습니다. 그래서, 내가 얻을 NoSuchMethodException.이음새 구성 요소에서 개인 메서드 호출

Object obj = Component.getInstance("myComponent"); 
Method myMethod = obj.getClass.getDeclaredMethod("myPrivateMethod",String.class); 
myMethod.invoke(obj,"myParameter"); 
+0

왜 개인 메서드를 호출하여 시작 하시겠습니까? 이 반사를 사용하여 코드 냄새처럼 보입니다. 메소드의 가시성을'protected' 또는'public'으로 변경하는 것이 더 낫습니다. –

+0

구성 요소 클래스가 사용자 정의 된 프레임 워크 jar 파일에 있기 때문입니다. 그래서 나는 그것을 직접 부르거나 변경할 수 없다. 하지만 자동 로그인 프로세스를 호출해야합니다. 이 private 메소드는 ** Login ** 메소드에서 호출되지만 ** Login ** 메소드 호출없이 호출해야합니다. – PyiSoeMaw

답변

2

제조 setAccessibletrue.

Method myMethod = obj.getClass.getDeclaredMethod("myPrivateMethod",String.class); 
method.setAccessible(true); 
Object r = myMethod.invoke(obj,"myParameter"); 

true 값은 반사 물체가 사용되는 경우, Java 언어 액세스 검사 억제한다는 것을 나타낸다. API에서 자세한 내용을 확인하십시오.

+0

예, setAccessible (true)을했지만 개인 메서드가 선언 된 메서드 배열에 포함되어 있지 않은 문제가 있습니다. – PyiSoeMaw

관련 문제