java使用(class类)反射机制实现对类的创建和初始化,比如一个javabean类

itismin 2013-01-31 07:56:59
比如实现类的方法 初始化的类
public static Object getInstance(String className,Object ... params){}
调用方法后,会创建person对象 和初始化
  public Class Person{     private String name; private int age; public String getName() {  return name; } public void setName(String name) {  this.name = name; } public int getAge() {  return age; } public void setAge(int age) {  this.age = age; } }
...全文
262 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
rockets311 2013-02-01
  • 打赏
  • 举报
回复
一道作业题
zhangpeng455547940 2013-02-01
  • 打赏
  • 举报
回复
import java.lang.reflect.Field;
import java.lang.reflect.Type;

public class MyPerson {
	
	/**
	 * 通过传入类的全限定名和成员属性值生成实例
	 * @param className
	 * @param params
	 * @return
	 */
	public static Object getInstance(String className, Object... params) {
		Class<?> clazz = null;
		Field[] fields = null;
		Object o = null;
		try {
			clazz = Class.forName(className);
			fields = clazz.getDeclaredFields(); // 取得类中的全部属性
			o = clazz.newInstance();
			// 传入的参数长度与生产的实例属性个数不一样
			if (params.length != fields.length) {
				return null;
			}
			for (int i = 0; i < fields.length; i++) {
				fields[i].setAccessible(true);
				Type type = fields[i].getType(); // 获得每个字段的类型
				String in = params[i].getClass().getName();
				Class<?> cIn = Class.forName(in); // 获得每个传入参数的类型
				// 相对应的参数类型不一样
				if (!type.equals(cIn)) {
					return null;
				}
				fields[i].set(o, params[i]);

				// Method method=clazz.getMethod("setName");
				// method.invoke(o, params[0]);
				// Method method2=clazz.getMethod("setAge");
				// method2.invoke(o, params[1]);

				// ((Person) o).setName((String)params[0]);
				// ((Person) o).setAge((Integer) params[1]);

			}
		} catch (ClassNotFoundException e) {
			System.out.println("找不到这个类...");
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		}

		return o;
	}

	public static void main(String[] args) {
//		Person o = (Person) MyPerson.getInstance("Person", "haha", 20);
		Person o = (Person) MyPerson.getInstance("Person", "haha", new Integer(20));
		System.out.println(o.toString());
	}
}

class Person {
	private String name;
	private Integer age;	// 写成基本类型 int型时报错...

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String toString() {
		return getName();
	}
}
chengxu2011 2013-01-31
  • 打赏
  • 举报
回复
不知道lz想说什么,如果想用反射生成对象的话则针对你的 Person可以写成Person.class.newInstance().....

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧