使用org.apache.commons.beanutils.BeanUtils 对类进行操作,需要对类进行实例化,如果要写一个通用的功能,则要实现动态实例化类,下面的例子
使用java反射机制对类进行实例化
首先是一个工具类,反射机制实现对属性赋值
写道
public class ReflectMatch {
public static void fill(Object bean, Field field, Method method, Object value) {
if (value == null)
return;
try {
Object[] oo = new Object[1];
String type = field.getType().getName();
if ("java.lang.String".equals(type)) {
oo[0] = value;
} else if ("java.lang.Integer".equals(type)) {
value = (Integer) value;
oo[0] = value;
} else if ("java.lang.Float".equals(type)) {
value = (Float) value;
oo[0] = value;
} else if ("java.lang.Double".equals(type)) {
value = (Double) value;
oo[0] = value;
} else if ("java.math.BigDecimal".equals(type)) {
value = (BigDecimal) value;
oo[0] = value;
} else if ("java.util.Date".equals(type)) {
oo[0] = value;
} else if ("java.sql.Timestamp".equals(type)) {
oo[0] = value;
} else if ("java.lang.Boolean".equals(type)) {
value = (Boolean) value;
oo[0] = value;
} else if ("java.lang.Long".equals(type)) {
value = (Long) value;
oo[0] = value;
} else {
oo[0] = value;
}
method.invoke(bean, oo);
} catch (Exception e) {
e.printStackTrace();
}
}
}
利用上面的工具类,实现对类的实例化
public Object instance(Object o) throws Exception {
if (o == null) {
o = o.getClass().newInstance();
}
Field[] fields = getAllField(o);
for (Field field : fields) {
if (isLeaf(field)) {
continue;
}
String filedName = field.getName().substring(1);
Method[] methods = getAllMethod(o);
for (Method me : methods) {
String meth = me.getName();
if (meth != null && "set".equals(meth.substring(0, 3)) && Modifier.isPublic(me.getModifiers()) && ("set" + Character.toUpperCase(filedName.charAt(0)) + filedName.substring(1)).equals(meth)) {
Object fieldObject = null;
if (isType(field)) {// 这里实现对特殊类型的实例化
String className = field.getType().getName();
fieldObject = this.getTypeInstance(className);
} else {
fieldObject = field.getType().newInstance();
}
ReflectMatch.fill(o, field, me, fieldObject);
System.out.println(filedName);
instance(fieldObject);
break;
}
}
}
return o;
}
这样就是先了类的实例化,就可以使用beanutils的api对 属性.属性.属性.属性进行赋值
分享到:
相关推荐
C# 反射,操作权限(新增,删除等),动态实例化类,一个C/S系统,每个模块上面都有很多操作按钮,你不可能每一窗体内在设权限的时候都用btn.enable=false/true,这样太烦了,可以作一个控件,这样统一按钮名称,然后...
动态实例化是反射的一个关键应用,它使得我们能够在运行时根据需要创建对象,而无需在编译时就确定具体类。这在处理插件系统、框架设计和元数据驱动的应用程序中非常有用。 首先,让我们深入理解反射的基本概念。...
总的来说,虽然Java中的抽象类不能直接实例化,但我们可以通过继承并实现其抽象方法,或者利用字节码工具和注解处理器在运行时或编译时动态生成新的类来间接达到实例化抽象类的目的。这样的设计允许我们创建更加灵活...
抽象工厂模式是一种设计模式,它提供一个创建对象族的接口,但允许子类决定实例化哪一个类。这种模式是工厂模式的一种扩展,适用于当系统需要一组相关或相互依赖的对象时,而这些对象的类可能在编译时未知。通过...
综上所述,通过数组实例化类对象是Java编程中的一个重要概念。它不仅可以帮助我们高效地管理具有相同属性的对象集合,还能简化程序结构,提高代码的可读性和可维护性。希望本文能够为你在学习或工作中应用这一技巧...
在Java编程语言中,动态地使用字符串来实例化类并调用其方法是一种高级特性,主要依赖于`java.lang.Class`类和`java.lang.reflect`包中的反射机制。这一技术在许多场景下都非常有用,例如在插件架构、动态加载类、...
实例076 动态实例化类 116 实例077 创建长度可变的数组 117 实例078 利用反射重写toString()方法 119 第8章 字符串与包装类 121 实例079 将数字格式化为货币字符串 122 实例080 货币金额大写格式 123 实例081 String...
### Java实例化类的方法 在Java编程语言中,类的实例化是创建对象的过程,它为程序中的数据和行为提供了一种封装机制。本文将详细探讨四种常用的Java类实例化方法,并通过示例代码加深理解。 #### 1. 使用`new`...
总结起来,实例化代码是将抽象的类转化为具体对象的过程,使得我们可以利用这些对象实现动态效果。在实际开发中,我们需要根据项目需求选择合适的编程语言、库或框架,以及具体的动画技术来创建吸引人的交互式用户...
例如,通过反射可以动态实例化类,而无需知道其具体名称;接口和继承可以使单例模式更易于扩展和适应多态场景;析构函数则可以在不再需要实例时进行资源清理。总的来说,单例模式是PHP面向对象编程中的一个重要工具...
这种动态实例化方法有以下几个优点: 1. **高内聚**:将实例化逻辑封装在`encode`方法内部,使得其他部分的代码无需关心具体的实现细节。 2. **低耦合**:调用者只需要传入条形码格式,无需了解如何创建具体的`...
实例158 动态实例化类 205 实例159 创建长度可变的数组 206 实例160 利用反射重写toString()方法 208 实例161 反射与动态代理 209 7.3 常见的未检查型异常 210 实例162 算数异常 210 实例163 数组存值异常 211 实例...
2. **单例模式的实现**:静态实例化是实现单例模式的一种方式,它保证了在整个应用生命周期内,某个类只有一个实例存在。 3. **依赖关系的注入**:静态实例化可以用于解决Bean之间的依赖关系问题。当一个Bean依赖于...
Java类的初始化和实例化详解 Java类的初始化和实例化是Java编程语言中两个非常重要的概念,它们都是Java类生命周期的重要组成部分。下面我们将详细介绍Java类的初始化和实例化的过程,并解释其中的细节。 一、Java...
总的来说,这个实例展示了如何在没有原生反射支持的C++中,通过类工厂和自定义注册机制来实现类的动态实例化。这种技术对于插件系统、动态加载模块或者需要在运行时发现和使用未知类型的场景非常有用。然而,需要...
Python是一种动态类型的编程语言,实例化一个对象非常直观。例如,如果我们有一个名为`Person`的类,我们可以通过以下方式创建它的实例: ```python class Person: def __init__(self, name, age): self.name = ...
RTTI可以提供类的类型信息,但其功能相对有限,无法直接用于动态实例化对象。 至于"消息机制",这是多线程或者多进程通信的一种方式,通常用于异步处理。在C++中,我们可以使用`std::condition_variable`、`std::...