首页 > Java > Java反射技术
2018
11-12

Java反射技术

Java反射技术实现代码


ReflectServiceImpl.java

package com.smmr.chapter2.reflect;

/**
* @ClassName ReflectServiceImpl
* @Description TODO
* @author Mukais
* @date 2018年11月12日
*
 */
public class ReflectServiceImpl {

	private String name;
	
	public ReflectServiceImpl() {}
	
	public ReflectServiceImpl(String name) {
		this.name = name;
	}
	
	public void sayHello() {
		System.out.println("Hello " + name);
	}
	
	public void sayHello(String name) {
		System.out.println("Hello " + name);
	}

}


Test.java

package com.smmr.chapter2.reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
* @ClassName Test
* @Description TODO
* @author Mukais
* @date 2018年11月12日
*
 */
public class Test {
	
	/**
	 * 无参构造反射
	 * @return
	 */
	public ReflectServiceImpl getInstance1() {
		ReflectServiceImpl obj = null;
		try {
			obj = (ReflectServiceImpl)Class.forName("com.smmr.chapter2.reflect.ReflectServiceImpl").newInstance();
		} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
			e.printStackTrace();
		}
		return obj;
	}
	
	/**
	 * 有参构造反射
	 * @return
	 */
	public ReflectServiceImpl getInstance2() {
		ReflectServiceImpl obj = null;
		try {
			obj = (ReflectServiceImpl)Class.forName("com.smmr.chapter2.reflect.ReflectServiceImpl").getConstructor(String.class).newInstance("张三");
		} catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
				| NoSuchMethodException | SecurityException | ClassNotFoundException e) {
			e.printStackTrace();
		}
		return obj;
	}
	
	/**
	 * 反射方法
	 * @return
	 */
	public Object reflectMethod() {
		Object obj = null;
		try {
			obj = (ReflectServiceImpl)Class.forName("com.smmr.chapter2.reflect.ReflectServiceImpl").newInstance();
			Method method = obj.getClass().getMethod("sayHello", String.class);
			method.invoke(obj, "张三");
		} catch (InstantiationException | IllegalAccessException |
				ClassNotFoundException | NoSuchMethodException | SecurityException |
				IllegalArgumentException | InvocationTargetException e) {
			e.printStackTrace();
		}
		return obj;
	}

	public static void main(String[] args) {
		
		new Test().getInstance1().sayHello("张三");
		new Test().getInstance2().sayHello();
		new Test().reflectMethod();

	}

}


运行结果

Hello 张三
Hello 张三
Hello 张三


本文》有 0 条评论

留下一个回复