方法反射的基本操作

使用反射来调用类方法

假设有类A,A中有三个同名方法分别是

  • print();
  • print(int, int);
  • print(String, String);
  1. 获取的类的类类型
A a = new A();
Class c = a.getClass();
  1. 通过类类型获取方法,传入参数(方法名,参数数组),如果方法没有参数,可以传入空的参数数组或者直接不传入,可能抛出异常,因为方法可能不存在
try{
    // Method m = c.getMethod("方法名", new Class[]{p1.class, p2.class···});
    // 或者
    // Method m = c.getMethod("方法名", p.class, p2.class···);
    Method m = c.getMethod("print", int.class, int.class);
}catch(Exception e){
    e.printStackTrace();
}
  1. 用m调用方法
 // m.invoke(Object obj, parameter);
 m.invoke(a, 10, 10);
 // 或者
 m.invoke(a, new Object[]{10, 10});

ClassDemo4.java

package com.immoc.reflect;

import java.lang.reflect.Method;

public class ClassDemo4 {
	
	public static void main(String []args) {
		A a = new A();
		// 获取的A类的类类型
		Class class1 = a.getClass();
		try {
			// 获取print(int, int) 方法
			// Method m1 = class1.getMethod("print", new Class[] {int.class, int.class});
			Method m1 = class1.getMethod("print", int.class, int.class);
			// m1.invoke(a, 10, 20);
			m1.invoke(a, new Object[]{10, 20});
			
			// 获取print(String, String)方法
			// Method m2 = class1.getMethod("print", String.class, String.class);
			Method m2 = class1.getMethod("print", new Class[] {String.class, String.class});
			m2.invoke(a, "hello", "WORLD");
			
			// 获取print()方法
			// Method m3 = class1.getMethod("print", new Class[]{});
			Method m3 = class1.getMethod("print");
			m3.invoke(a);
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
}
class A{
	public void print() {
		System.out.println("Hello World");
	}
	public void print(int a, int b) {
		System.out.println(a+b);
	}
	public void print(String a, String b) {
		System.out.println(a.toUpperCase() + "," + b.toLowerCase());
	}
}

猜你喜欢

转载自blog.csdn.net/innocent_jia/article/details/89041570
今日推荐