BbaDdo :: java.lang.reflect.Method.invoke 메서드 활용


크리에이티브 커먼즈 라이선스
Creative Commons License

 

 

 

 

 

 다른 클래스의 특정 메서드를 실행시키고 싶을

 때,   클래스객체를 생성해서 클래스 문을 열고   

 들어가 실행하는 것은 당연하지만, 

 

 예를들면, 안드로이드 이미지뷰를 상속받은 클래

 스와 같이 생성자 매개변수를 가져오기 까다로와

 객체 생성이 어려울때,

 

 사용할 수 있는 유용한 메서드, 
 
 java.lang.reflect 패키지에 있는...

 

 

Method.invoke()  인보크....

Object java.lang.reflect.Method.invoke(Object receiver, Object... args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException

 

레퍼런스 : http://developer.android.com/reference/java/lang/reflect/package-summary.html
 

객체지향과는 거리가 멀어지는 메서드이지만 꼭 필요한 경우, 어디든지 무대포로 뚫고 들어가 실행시켜주는 고마운 만능키(?) 메서드 하지만 예외처리가 중요. 왠지 남용해서는 안될 듯한 ......

 

     Object receiver  : 실행시킬 메서드가 있는 클래스의 객체, 미리 해당 클래스에서

Object 멤버변수(receiver)를 static으로 지정해 this 예약어(클래스 자신을 지칭하는 객체)를 대입하면 됨.

                              >>호출방법 ClassName.receiver

    receiver.getClass().getMethod() :  동적으로 원하는 해당 클래스의 메서드에 접근

    methodName : 실행할 메서드 이름, String

    Object.class : 실행할 메서드의 매개변수형

    invoke(): Method 클래스의 메서드, 동적으로 호출된 메서드의 결과(Object) 리턴

    args : 매개변수값, Object

 

 try {   //동적으로 다른 클래스의  메서드 호출, 예외처리에 신중할 것
      try {
             receiver.getClass().getMethod(methodName, Object.class)

       .invoke(receiverargs); 
            //  Method (메서드이름,    매개변수형)

            //    .invoke (클래스 객체,  매개변수값)

 } 
 catch (IllegalArgumentException e) { } 
 catch (IllegalAccessException e) { } 
 catch (InvocationTargetException e) { }

 } 
 catch (SecurityException e) { } 
 catch (NoSuchMethodException e) { }

 

 

만일 실행 메서드의 매개변수가 없을 경우에는  Object.class  항에 (Class<?>[]) null  로 코딩하면 된다.  물론 invoke() 메서드의 매개변수에는 invoke(receiver) 같이 매개변수값 없음.

 

저작자 표시 비영리 변경 금지
신고
1 ··· 7 8 9 10 11 12 13 14 15 16 

카운터

Total : 14,302 / Today : 0 / Yesterday : 10
get rsstistory!

티스토리 툴바