非深入探尋Java反射機制 (Methods)

來源:互聯網
上載者:User

通過 java.lang.reflect.Method,我們可以在運行時訪問並調用類的方法。

  • Obtaining Method Objects

如果知道方法的簽名,則可以直接取出指定的方法:

package tao.xiao.action;import java.lang.reflect.Method;public class A implements IT1 {public void f1() {}public void f1(String s) { }public String f2(int x) { return "xxx"; };public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException {Class myClass = Class.forName("tao.xiao.action.A");Method[] methods = myClass.getMethods();//取得全部的方法Method m1 = myClass.getMethod("f1", null);//函數沒有參數則傳入nullMethod m2 = myClass.getMethod("f1", new Class[]{String.class});Method m3 = myClass.getMethod("f2", new Class[]{int.class});System.out.println(m1);System.out.println(m2);System.out.println(m3);}}

運行結果為

public void tao.xiao.action.A.f1()public void tao.xiao.action.A.f1(java.lang.String)public java.lang.String tao.xiao.action.A.f2(int)

  • Method Parameters and Return Types

package tao.xiao.action;import java.lang.reflect.Method;public class A implements IT1 {public String[] f(int x, double[] y, String z) { return null; };public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException {Class myClass = Class.forName("tao.xiao.action.A");Method m = myClass.getMethod("f", new Class[]{int.class, double[].class, String.class});Class[] parameterTypes = m.getParameterTypes();for (Class parameterType : parameterTypes)System.out.println(parameterType);Class returnType = m.getReturnType();System.out.println(returnType);}}

運行結果為:

intclass [Dclass java.lang.Stringclass [Ljava.lang.String;

  • Invoking Methods using Method Object

package tao.xiao.action;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class A implements IT1 {public String[] f1(int x, double[] y, String z) { System.out.println("f1: x = " + x + ", y = " + y + ", z = " + z);return new String[]{"AAA", "BBB"};}public static void f2(int x) { System.out.println("f2: x = " + x); }public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, InvocationTargetException, IllegalArgumentException, IllegalAccessException {Method m1 = A.class.getMethod("f1", new Class[]{int.class, double[].class, String.class});Method m2 = A.class.getMethod("f2", int.class);A objA = new A();String[] ss = (String[])m1.invoke(objA, 100, new double[]{200, 300, 400}, "haha");for (String s : ss)System.out.println(s);m2.invoke(null, 330);// 對於static方法,invoke的第一個參數傳入null}}

運行結果為

f1: x = 100, y = [D@61de33, z = hahaAAABBBf2: x = 330

下一章:非深入探尋Java反射機制(Getters and Setters)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.