A simple Java class is not the only property type String, also contains integer, float, date, etc. This course explains how to achieve a variety of data types assignment and conversion processing operations.
A class reference relationship can occur with other classes to describe the relationship between each other, such a cascade structure object instantiation need to consider the problem, how to explain how this course is reflected by dynamic technique multistage arrangement relationship VO examples of the operation object.
After class reference will define the presence of other types of attributes cited assignment, mainly on the course of the multi-level instance of the object property acquiring attribute of the content thereto.
1 package com.twitter.demo; 2 3 import java.util.Date; 4 import java.lang.reflect.Field; 5 import java.lang.reflect.Method; 6 import java.text.ParseException; 7 import java.text.SimpleDateFormat; 8 9 class Company{ 10 private String name; 11 private Date createdate; 12 public String getName() { 13 return this.name; 14 } 15 public void setName(String name) { 16 this.name = name; 17 } 18 public Date getCreatedate() { 19 return this.createdate; 20 } 21 public void setCreatedate(Date createdate) { 22 this.createdate = createdate; 23 } 24 } 25 26 class Dept{ 27 private String dname; 28 private String loc; 29 private Company company; 30 public String getDname() { 31 return dname; 32 } 33 public void setDname(String dname) { 34 this.dname = dname; 35 } 36 public String getLoc() { 37 return loc; 38 } 39 public void setLoc(String loc) { 40 this.loc = loc; 41 } 42 public Company getCompany() { 43 return company; 44 } 45 public void setCompany(Company company) { 46 this.company = company; 47 } 48 } 49 50 class Emp{ 51 private String ename; 52 private String job; 53 private Double salary; 54 private Integer age; 55 private Date hiredate; 56 private Dept dept; 57 public String getEname() { 58 return ename; 59 } 60 public void setEname(String ename) { 61 this.ename = ename; 62 } 63 public String getJob() { 64 return job; 65 } 66 public void setJob(String job) { 67 this.job = job; 68 } 69 public Double getSalary() { 70 return salary; 71 } 72 public voidsetSalary (Double PS) { 73 this .salary = PS; 74 } 75 76 public Integer getAge () { return age; 77 } 78 public void setAge (Integer age) { 79 this .age = age; 80 } 81 82 public Date getHiredate () { return hiredate; 83 } 84 public void setHiredate (Date hiredate) { 85 this .hiredate = hiredate; 86 } 87 public Dept getDept() { 88 return dept; 89 } 90 public void setDept(Dept dept) { 91 this.dept = dept; 92 } 93 } 94 95 class BeanUtils{ 96 private BeanUtils() {} 97 public static void setValue(Object obj,String value) { 98 String results[] = value.split("\\|"); 99 for(int x=0;x<results.length;x++) { 100 String attval[] = results[x].split(":"); 101 try { 102 if(attval[0].contains(".")) { 103 String temp[] = attval[0].split("\\."); 104 Object currentObject = obj; 105 for(int y=0;y<temp.length-1;y++) { 106 Method getMethod = currentObject.getClass().getDeclaredMethod("get" + StringUtils.initcap(temp[y])); 107 Object tempObject = getMethod.invoke(currentObject); 108 if(tempObject == null) { 109 Field field = currentObject.getClass().getDeclaredField(temp[y]); 110 Method method = currentObject.getClass().getDeclaredMethod("set"+StringUtils.initcap(temp[y]), field.getType()); 111 Object newObject = field.getType().getDeclaredConstructor().newInstance(); 112 method.invoke(currentObject, newObject); 113 currentObject = newObject; 114 }else { 115 currentObject = tempObject; 116 } 117 } 118 }else { 119 Field field = obj.getClass().getDeclaredField(attval[0]); 120 Method setMethod = obj.getClass().getDeclaredMethod("set"+StringUtils.initcap(attval[0]), field.getType()); 121 Object convertValue = BeanUtils.convertAtributeValue(field.getType().getName(), attval[1]); 122 setMethod.invoke(obj, convertValue); 123 } 124 } catch (Exception e) { 125 // TODO: handle exception 126 } 127 } 128 } 129 130 private static Object convertAtributeValue(String type,String value) { 131 if("long".equals(type)||"java.lang.Long".equals(type)) { 132 return Long.parseLong(value); 133 }else if ("int".equals(type)||"java.lang.Integer".equals(type)) { 134 return Integer.parseInt(value); 135 }else if ("double".equals(type)||"java.lang.Double".equals(type)) { 136 return Double.parseDouble(value); 137 }else if ("java.util.Date".equals(type)) { 138 SimpleDateFormat sdf = null; 139 if(value.matches("\\d{4}-\\d{2}-\\d{2}")) { 140 sdf = new SimpleDateFormat("yyyy-MM-dd"); 141 }else if (value.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}-\\d{2}-\\d{2}")) { 142 sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 143 }else { 144 return new Date(); 145 } 146 try { 147 return sdf.parse(type); 148 } catch (ParseException e) { 149 return new Date(); 150 } 151 }else { 152 return value; 153 } 154 } 155 } 156 157 class StringUtils{ 158 public static String initcap(String str) { 159 if(str == null || "".equals(str)) { 160 return str; 161 } 162 if(str.length() == 1) { 163 return str.toUpperCase(); 164 }else { 165 return str.substring(0,1).toUpperCase()+str.substring(1); 166 } 167 } 168 } 169 170 class ClassInstanceFactory{ 171 private ClassInstanceFactory() {} 172 public static <T> T create(Class<?> clazz,String value) { 173 try { 174 Object obj = clazz.getDeclaredConstructor().newInstance(); 175 BeanUtils.setValue(obj, value); 176 return (T) obj; 177 } catch (Exception e) { 178 return null; 179 } 180 181 } 182 } 183 184 public class JavaReflectDemo { 185 public static void main(String[] args) throws Exception{ 186 String value = "ename:Smith|job:Clerk|salary:8960.00|age:30|hiredate:2003-10-03|" 187 +"dept.dname:财务部|dept.company.name:twitter|" 188 +"dept.company.createdate:2001-11-11"; 189 Emp emp = ClassInstanceFactory.create(Emp.class, value); 190 System.out.println(emp); 191 System.out.println(emp.getDept()); 192 System.out.println(emp.getDept().getCompany()); 193 } 194 }