>  기사  >  Java  >  리플렉션(호출)을 사용하여 클래스의 메서드 가져오기

리플렉션(호출)을 사용하여 클래스의 메서드 가져오기

PHP中文网
PHP中文网원래의
2017-06-20 17:15:071673검색

이 기사는 위의 "클래스 정보를 얻기 위한 리플렉션"에 이어서 리플렉션(호출)을 사용하여 클래스에서 실행할 메소드를 얻습니다.

1. 이름은 같고 매개변수는 다른 세 가지 메서드가 포함된 클래스를 정의합니다

 1 class A{ 2     public void print(){ 3         System.out.println("Hello,World"); 4     } 5  6     public void print(int a,int b){ 7         System.out.println(a+b); 8     } 9     public void print(String a,String b){10         System.out.println(a.toUpperCase()+","+b.toLowerCase());11     }12 }

2. 메서드 리플렉션(호출)을 사용하여 클래스의 세 가지 메서드를 가져와 각각 실행합니다

 1 public class Test { 2     public static void main(String[] args) { 3         /** 4          * 获取print(int,int)方法 5          * 1、获取类的类类型 6          */ 7         A a1 = new A(); 8         Class clazz = a1.getClass(); 9         /**10          * 2、获取方法(名称、参数列表)11          * getMethod()获取的是public方法12          * getDeclaredMethod()获取的是自己声明的方法13          */14         try {15 //            Method m = clazz.getMethod("print",new Class[]{int.class,int.class});16             Method m = clazz.getMethod("print", int.class, int.class);17             //方法的反射操作,用m对象进行方法调用,a1.print完全相同18             //方法没有返回值返回null,有返回值返回具体的返回值19 //            Object obj = m.invoke(a1,new Object[]{10,20});20             Object obj = m.invoke(a1,10,20);21 22             System.out.println("================================================");23 24             Method m2 = clazz.getMethod("print", String.class, String.class);25             m2.invoke(a1,"aaa","BBB");26 27             System.out.println("================================================");28 29             Method m3 = clazz.getMethod("print");30             m3.invoke(a1);31         } catch (Exception e) {32             e.printStackTrace();33         }34     }35 }

3. 전체 코드

 1 package com.format.test; 2  3 import java.lang.reflect.Method; 4  5 /** 6  * Created by Format on 2017/6/3. 7  */ 8 public class Test { 9     public static void main(String[] args) {10         /**11          * 获取print(int,int)方法12          * 1、获取类的类类型13          */14         A a1 = new A();15         Class clazz = a1.getClass();16         /**17          * 2、获取方法(名称、参数列表)18          * getMethod()获取的是public方法19          * getDeclaredMethod()获取的是自己声明的方法20          */21         try {22 //            Method m = clazz.getMethod("print",new Class[]{int.class,int.class});23             Method m = clazz.getMethod("print", int.class, int.class);24             //方法的反射操作,用m对象进行方法调用,a1.print完全相同25             //方法没有返回值返回null,有返回值返回具体的返回值26 //            Object obj = m.invoke(a1,new Object[]{10,20});27             Object obj = m.invoke(a1,10,20);28 29             System.out.println("================================================");30 31             Method m2 = clazz.getMethod("print", String.class, String.class);32             m2.invoke(a1,"aaa","BBB");33 34             System.out.println("================================================");35 36             Method m3 = clazz.getMethod("print");37             m3.invoke(a1);38         } catch (Exception e) {39             e.printStackTrace();40         }41     }42 }43 44 class A{45     public void print(){46         System.out.println("Hello,World");47     }48 49     public void print(int a,int b){50         System.out.println(a+b);51     }52     public void print(String a,String b){53         System.out.println(a.toUpperCase()+","+b.toLowerCase());54     }55 }
코드 보기

4. 실행 결과

위 내용은 리플렉션(호출)을 사용하여 클래스의 메서드 가져오기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.