什么是設置多種數(shù)據(jù)類型

本篇內(nèi)容主要講解“什么是設置多種數(shù)據(jù)類型”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“什么是設置多種數(shù)據(jù)類型”吧!

創(chuàng)新互聯(lián)建站于2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務公司,擁有項目成都網(wǎng)站建設、網(wǎng)站建設網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元陵城做網(wǎng)站,已為上家服務,為陵城各地企業(yè)和個人服務,聯(lián)系電話:028-86922220

設置多種數(shù)據(jù)類型

現(xiàn)在已經(jīng)成功的實現(xiàn)了單級的屬性配置,但是這里面依然需要考慮一個實際的情況:當前所給定的數(shù)據(jù)類型只是String。在實際的開發(fā)中面對簡單Java類中的屬性類型一般的可選為:long(Long)、int(Integer)、double(Double)、String、Date(日期、日期時間),所以這時對于當前的程序代碼必須做出修改,要求可以實現(xiàn)各種數(shù)據(jù)類型的配置。

既然要求可以實現(xiàn)不同類型的內(nèi)容設置,并且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(){}/**
     * 實例化對象的創(chuàng)建方法,該對象可以根據(jù)傳入的字符串結(jié)構(gòu):"屬性:內(nèi)容|屬性:內(nèi)容"
     * @param clazz 要進行反射實例化的Class對象,有Class就可以反射實例化對象
     * @param value 要設置給對象的屬性內(nèi)容
     * @return 一個已經(jīng)配置好屬性內(nèi)容的Java對象
     */public static <T> T create(Class<?> clazz,String value){// 如果要想采用反射進行簡單Java類對象屬性設置的時候,類中必須要有無參構(gòu)造try {
            Object obj = clazz.getDeclaredConstructor().newInstance();
            BeanUtils.setValue();   //通過反射設置屬性return (T) obj; //返回對象}catch (Exception e) {
            e.printStackTrace();  //如果此時真的出現(xiàn)了錯誤,本質(zhì)上拋出異常也沒用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(){}/**
     * 實現(xiàn)指定對象的屬性設置
     * @param obj 要進行反射操作的實例化對象
     * @param value 包含有指定內(nèi)容的字符串,格式"屬性:內(nèi)容|屬性:內(nèi)容"
     */public static void setValue(Object obj,String value){
        String results [] = value.split("\\|");//按照"|"進行每一組屬性的拆分for (int x = 0; x < results.length; x ++) {   //循環(huán)設置屬性內(nèi)容//attval [0]保存的是屬性名稱,attval [1]保存的是屬性內(nèi)容String attval [] = results[x].split(":");   //獲取“屬性名稱”和內(nèi)容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);  //調(diào)用setter方法設置內(nèi)容}catch (Exception e) {
            }
        }
    }/**
     * 實現(xiàn)屬性類型轉(zhuǎn)換處理
     * @param type 屬性類型,通過Field獲取
     * @param value 屬性的內(nèi)容,傳入的都是字符串,需要將其變?yōu)橹付愋?
     * @return 轉(zhuǎn)換后的數(shù)據(jù)類型
     */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;
    }
}

執(zhí)行結(jié)果:
什么是設置多種數(shù)據(jù)類型

此時只是列舉了常用幾種數(shù)據(jù)類型,如果要將其作為產(chǎn)品推廣,必須要考慮所有可能出現(xiàn)的類型,同時也要考慮所有可能會出現(xiàn)的日期格式。

到此,相信大家對“什么是設置多種數(shù)據(jù)類型”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

當前題目:什么是設置多種數(shù)據(jù)類型
鏈接地址:http://muchs.cn/article36/gedspg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供域名注冊、響應式網(wǎng)站、定制網(wǎng)站、電子商務、面包屑導航、品牌網(wǎng)站設計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設公司