Student Class:
package com.iden.reflection; public class Student { private String name; private int score; public Student() { name = "N/A"; } public Student(String name, int score) { this.name = name; this.score = score; } public void setName(String name) { this.name = name; } public void setScore(int score) { this.score = score; } public String getName() { return name; } public int getScore() { return score; } public void showData() { System.out.println("name: " + name); System.out.println("score: " + score); } }
InvokeMethodDemo Class 調用Student object實作方法:
package com.iden.reflection; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class InvokeMethodDemo { private static String className; public static void main(String[] args) { //動態載入與呼叫方法 try { if(args.length == 0) className = "com.iden.reflection.Student"; else className = args[0]; Class c = Class.forName(className);//呼叫Class Object targetObj = c.newInstance();//動態實作物件 Class[] param1 = {String.class}; Method setName = c.getMethod("setName", param1);//指定物件的方法 Object[] paramObjs1 = {"caterpillar"}; setName.invoke(targetObj, paramObjs1);//將參數帶入方法 Class[] param2 = {Integer.TYPE}; Method setScore = c.getMethod("setScore", param2); Object[] paramObjs2 = {new Integer(90)}; setScore.invoke(targetObj, paramObjs2); Method showData = c.getMethod("showData", new Class[0]); showData.invoke(targetObj, new Object[0]);// call showData method to show name and score. } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } } }
感謝良葛格做了這麼棒的教學。
良葛格範例