千家信息网

什么是设置多种数据类型

发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,本篇内容主要讲解"什么是设置多种数据类型",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"什么是设置多种数据类型"吧!设置多种数据类型现在已经成功的实现了单级
千家信息网最后更新 2025年11月13日什么是设置多种数据类型

本篇内容主要讲解"什么是设置多种数据类型",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"什么是设置多种数据类型"吧!

设置多种数据类型

现在已经成功的实现了单级的属性配置,但是这里面依然需要考虑一个实际的情况:当前所给定的数据类型只是String。在实际的开发中面对简单Java类中的属性类型一般的可选为:long(Long)、int(Integer)、double(Double)、String、Date(日期、日期时间),所以这时对于当前的程序代码必须做出修改,要求可以实现各种数据类型的配置。

既然要求可以实现不同类型的内容设置,并且BeanUtils类主要是完成属性赋值处理的,那么就可以在这个类中追加一系列的处理方法。

import java.lang.reflect.Field;import java.lang.reflect.Method;public class JavaAPIDemo {public static void main(String[] args)throws Exception{        String value="empno:7369|ename:Smith|job:Clerk|salary:750.00|hiredate:1989-10-10";        Emp emp = ClassInstanceFactory.create(Emp.class, value);        System.out.println("雇员编号:" + emp.getEmpno() + "、姓名:" + emp.getEname() + "、职位:" + emp.getJob() + "、基本工资:" + emp.getSalary() + "、受雇日期:" + emp.getHiredate());    }}class ClassInstanceFactory{private ClassInstanceFactory(){}/**     * 实例化对象的创建方法,该对象可以根据传入的字符串结构:"属性:内容|属性:内容"     * @param clazz 要进行反射实例化的Class对象,有Class就可以反射实例化对象     * @param value 要设置给对象的属性内容     * @return 一个已经配置好属性内容的Java对象     */public static  T create(Class clazz,String value){// 如果要想采用反射进行简单Java类对象属性设置的时候,类中必须要有无参构造try {            Object obj = clazz.getDeclaredConstructor().newInstance();            BeanUtils.setValue();   //通过反射设置属性return (T) obj; //返回对象}catch (Exception e) {            e.printStackTrace();  //如果此时真的出现了错误,本质上抛出异常也没用return null;        }        }}class StringUtils {public static String initcap(String str) {if (str == null || "".equals(str)) {return str;        }if (str.length() == 1) {return str.toUpperCase();        }else {return str.substring(0, 1).toUpperCase() + str.substring(1);        }    }}class BeanUtils{   //进行Bean处理的类private BeanUtils(){}/**     * 实现指定对象的属性设置     * @param obj 要进行反射操作的实例化对象     * @param value 包含有指定内容的字符串,格式"属性:内容|属性:内容"     */public static void setValue(Object obj,String value){        String results [] = value.split("\\|");//按照"|"进行每一组属性的拆分for (int x = 0; x < results.length; x ++) {   //循环设置属性内容//attval [0]保存的是属性名称,attval [1]保存的是属性内容String attval [] = results[x].split(":");   //获取"属性名称"和内容try {                Field field = obj.getClass().getDeclaredField(attval[0]);  //获取成员Method setMethod = obj.getClass().getDeclaredMethod("set" + StringUtils.initcap(attval [0]), field.getType());                Object convertValue = BeanUtils.convertAttributeValue(field.getType().getName(), attval[1]);                setMethod.invoke(obj, convertValue);  //调用setter方法设置内容}catch (Exception e) {            }        }    }/**     * 实现属性类型转换处理     * @param type 属性类型,通过Field获取     * @param value 属性的内容,传入的都是字符串,需要将其变为指定类型     * @return 转换后的数据类型     */private static Object convertAttributeValue(String type, String value) {if ("long".equals(type) || "java.lang.Long".equals(type)) {    //长整型return Long.parseLong(value);        }else if ("int".equals(type) || "java.lang.int".equals(type)) {return Integer.parseInt(value);        }else if ("double".equals(type) || "java.lang.double".equals(type)) {return Integer.parseDouble(value);        }else if ("java.util.Date".equals(type)) {            SimpleDateFormat sdf = null;if (value.matches("\\d{4}-\\d{2}-\\d{2}") {  //日期类型sdf = new SimpleDateFormat("yyyy-MM-dd");            } else if (value.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}") {                sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");            }else {return new Date() ;   //当前日期}try {return sdf.parse(value);            } catch(ParseException e) {return new Date() ;   //当前日期}        }else {return value;        }    }}class Emp{private long empno;private String ename;private String job;private double salary;private Date hiredate;public void setEname(String ename) {this.ename = ename;    }public void setJob(String job) {this.job = job;    }public String getEname() {return ename;    }public String getJob() {return job;    }public long getEmpno() {return empno;    }public void setEmpno(Long empno) {this.empno = empno;    }public double getSalary() {return salary;    }public void setSalary(double salary) {this.salary = salary;    }public Date getHiredate() {return hiredate;    }public void setHiredate(Date hiredate) {this.hiredate = hiredate;    }}

执行结果:

此时只是列举了常用几种数据类型,如果要将其作为产品推广,必须要考虑所有可能出现的类型,同时也要考虑所有可能会出现的日期格式。

到此,相信大家对"什么是设置多种数据类型"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0