数据类型-通过类反射获取实体类对象

问题描述

通过类反射获取实体类对象
private String[] colName = null; // 属性名数组数组
private String[] colType = null; // 存放实体类的数据类型 如java.lang.Long
private String[] colValue = null; // 要存进去的值

请问一下我有一个实体类 要把colValue里的数据以colType类型存到TbUser实体类的属性里 并且返回这个实体类 的对象 请大神给个思路 。。。 多谢

解决方案

如果colType仅仅是简单类型,那么最简单的是直接switch类型然后用 xxx.parseXXX() 解析字符串就可以了
http://longzhun.iteye.com/blog/1084362

解决方案二:

package com.reflect;

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;

public class ReflectSetObject {
static class TbUser {
private int userId;
private String userName;
private String userPassword;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "userId = " + userId + " ,userName = "+userName+ " ,userPassword = "+userPassword;
    }
}

/**
 * 未用colType,因Class c = Class.forName(colType[i]); c.cast(colValue[i])对int不行
 * @param cls
 * @param colName
 * @param colType
 * @param colValue
 * @return
 */
public <T> T setObject(Class<T> cls, String[] colName, String[] colType, String[] colValue){
    T t = null;
    try {
        t = cls.newInstance();
        BeanInfo info = Introspector.getBeanInfo(cls);
        PropertyDescriptor[] pros = info.getPropertyDescriptors();
        for (PropertyDescriptor pro : pros) {
            String pname = pro.getName();
            for(int i=0; i<colName.length ;i++){
                if(pname.equals(colName[i])){
                    try {

// Class c = Class.forName(colType[i]);
// c.cast(colValue[i]);
Class<?> c = pro.getPropertyType();
if(c == java.lang.Integer.class || c == int.class){
pro.getWriteMethod().invoke(t, java.lang.Integer.valueOf(colValue[i]));
break;
}else if(c == java.lang.String.class){
pro.getWriteMethod().invoke(t, colValue[i]);
break;
}else{
break;
}
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
} catch (IntrospectionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return t;
}

public static void main(String[] args){
    ReflectSetObject s = new ReflectSetObject();
    TbUser u = s.setObject(TbUser.class, new String[]{"userId","userName","userPassword"},
            null, new String[]{"123", "zhansan", "123"});
    System.out.println(u);
}

}

用JavaBean自省,可以实现但不建议你这么操作。看你这个像是数据库操作。

时间: 2024-10-29 16:16:22

数据类型-通过类反射获取实体类对象的相关文章

对象-从一个类里调用实体类的set方法如何在另一个类使用get方法获取这个值

问题描述 从一个类里调用实体类的set方法如何在另一个类使用get方法获取这个值 从一个类里调用实体类的set方法如何在另一个类使用get方法获取这个值我调用get方法是又new了一个实体类的对象,因为初始化了结果获取的值是空的. 解决方案 设置成静态的,就行了 解决方案二: 你参考一下构建器模式或者是静态工厂方法,应该就有解答了,你的需求时要求创建多个对象时用单例模式,这样才能保证不new新的对象 解决方案三: private String title; public String getTi

spring-通过类反射调用的类中,通过Spring @Autowired 装载失败

问题描述 通过类反射调用的类中,通过Spring @Autowired 装载失败 使用了@Autowired注释,自动装配成员变量,正常情况下没有问题,但是当这个类通过java的反射机制调用时,自动装配失败,成员变量时空值,出现空指针异常. 解决方案 已经解决了,不过觉得破坏了框架,可能真的没法办法吧,现在贴出来我自己解决的办法 //手动注入,防止反射无法注入 private void ManulInject(){ ApplicationContext apx=new ClassPathXmlA

java中什么是实体类,为什么实体类的变量都用private修饰?

问题描述 java中什么是实体类,为什么实体类的变量都用private修饰? java中什么是实体类,为什么实体类的变量都用private修饰?能否举个实体类的简单例子,谢谢 解决方案 关于什么是实体类,可以看这里:Java什么是实体类实体类有什么用? 例如一个订单实体类Order.java,里边:id(主键).orderNo(订单号).userId(订单所属用户ID).status(支付状态).createTime(创建时间)等属性. 因为这些属性,基本都是供订单类自己使用的,所以一般都将它们

利用反射获取方法参数对象的泛型定义

问题描述 利用反射获取方法参数对象的泛型定义 public CommonRsp<AAARsp> hotelCheckAvailability(CommonReq<BBBReq> req) throws Exception; 如何通过反射获取如上方法中的参数泛型定义BBBReq? 解决方案 你这是java语法吗,如果是的话,其实java的泛型本质上是糖衣语法,编译后泛型是会被擦除的.你获取泛型本质上是没有意义的,应该是获取不到的.

java实体类-java 映射实体类使用

问题描述 java 映射实体类使用 从数据库根据表映射生成一个实体类,这个类如何使用 ,因为我没办法引用啊 设定参数值后 那要怎么传参取参等等... 解决方案 把问题再具体化下,你想在哪引用.传值是从哪传到哪 解决方案二: 我不知道怎么回答这个问题,我觉得问的很不清晰. 首先你有没有使用框架,比如hibernate.mybaits 等. 如果没有,你的映射指的是什么,比如hibernate 映射关系通过xml配置.或注解等,所谓的映射是,框架帮你处理好类与数据库之间的关系. 你需要有处理这些的业

CYQ.Data V4.5.5 版本发布[顺带开源Emit编写的快速反射转实体类FastToT类]

前言:   继上一版本:CYQ.Data 数据框架 版本发布 V4.5,刷的一下又三个多月了, 进一步的说,从 CYQ.Data V4.5的发布到现在,是半年多了,今天,终于得发布新小版本了. 由于上一版本过于稳定,导致此版本无bug修正项,但是新增了几个重要的性能优化功能.   本版本新增加的功能预览   1:优化Access.SQLite数据库链接,以{0}代表根目录 好处:可以配置多个数据库链接,示例如:秋色园QBlog同时用了N个access数据库.   2:MAction增加指定列的查

通过反射获取指定类的指定方法

问题描述 package test;import java.lang.reflect.Method;public class OtherTest {public void doTest(OtherTest[] tests){}public static void main(String[] args) throws Exception{Class clazz = Class.forName("test.OtherTest");Method method = clazz.getDecla

使用反射获取和设置对象的值

使用Java如何获取对象的私有成员变量的值呢? 有一个bean: Java代码   public class Student2 {       /***       * 学号       */       private String schoolNumber;       private String classroom;                    public void setSchoolNumber(String schoolNumber) {           this.s

通过反射获取实体集合属性值并赋值给另一个实体集合

                  在List提供的方法中,提供了将一个类型的List转换成为另一个List类型的方法,如下:         //构造类1集合 TestClass1 test1 = new TestClass1(); List<TestClass1> class1 = new List<TestClass1>(); test1 .Name ="lhc"; test1 .ID =2; class1.Add(test1); //构造类2集合 Tes