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; } }
...全文
217 3 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
rockets311 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().....
  • 打赏
  • 举报
回复
相关推荐
课程设计-基于C++mfc框架学生社团管理系统源码+数据库+报告.zip 本系统实现功能 本程序为单文档应用程序主程序界面能实现查询社团信息、修改社团信息、删除社团信息、添加社团信息、入团、退团、用户登录、用户管理功能其中修改社团信息、删除社团信息、添加社团信息用户管理需要用户登录后才能使用未登录就点击使用会会弹出对话框显示您还没有登录点击登录按钮会弹出用户登录对话框输入正确用户名称密码若验证成功则会显示登录成功并显示出您用有权限高级管理员或者是普通管理员高级管理员则可以对社团信息进行修改、删除、添加。点击入团按钮会弹出加入社团对话框在对话框内填上相应信息后点击确定成功加入后会有相关提示若没有成功则有可能您输入社团不存在点击退团按钮弹出退出社团对话框输入您要退出社团名称学号点击确定如果成功退出会显示成功标志否则话就是您没有假如该社团活着您填信息不完全。在主程序对话框中可以直接在控件内输入要修改社团信息然后点击修改按钮分别输入控件中内容然后点击添加按钮若要添加社团当前没有话则添加成功否则会失败。登录了以后点击用户管理按钮则会弹出用户管理对话框在该对话框内可以修改用户密码高级管理员还能注册新用户。
发帖
Java SE
加入

6.2w+

社区成员

Java 2 Standard Edition
社区管理员
  • Java SE
申请成为版主
帖子事件
创建了帖子
2013-01-31 07:56
社区公告
暂无公告