java使用(class类)反射机制实现对类的创建和初始化,比如一个javabean类 本帖最后由 itismin 于 2013-01-31 20:12:41 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不知道lz想说什么,如果想用反射生成对象的话则针对你的 Person可以写成Person.class.newInstance()..... 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(); }} 谁有twaver 3.5完整包给我一份 java 类QQ 大家过来看看IBM考试题 进来者有分给 100分 怎样使产生的随机数不出现重复 在SWING中怎么调用保存文件和打开文件的对话框?有没有? java程序查询access数据库,怎么也查不出结果,系统没有提示任何语法错误,恳请诸位大侠给予帮助解决下,提前谢过了! java 中 ">>" 和 ">>>"有什么区别啊? 新手拜师 关于static method的错误 java中synchronized 大家帮忙看下,为什么会编译错误?
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();
}
}