单级属性赋值
package 阿里云大学java.java高级学习.反射练习;
import com.sun.deploy.util.StringUtils;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class 单级属性赋值 {
public static void main(String[] args) {
String value = "name:骚包|job:扫厕所";
Emp emp = ClassInstanceFactory.create(Emp.class,value);
System.out.println("姓名:" + emp.getName() + "、工作:" + emp.getJob());
}
}
class ClassInstanceFactory {
private ClassInstanceFactory(){}
public static <T> T create(Class<?> clazz,String value){
try{
Object obj = clazz.getDeclaredConstructor().newInstance();
BeanUtils.setValue(obj,value);
return (T) obj;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
}
class ZmUtils {
private ZmUtils(){}
public static String initcap(String str){
if(str == null || "".equals(str)){
return null;
}
if(str.length() == 1) {
return str.toUpperCase();
}else{
return str.substring(0,1).toUpperCase() + str.substring(1);
}
}
}
class BeanUtils {
private BeanUtils(){}
public static void setValue(Object obj , String value) {
String[] ans = value.split("\\|");
for(int i=0;i<ans.length;i++){
String[] temp = ans[i].split(":");
try{
Field field = obj.getClass().getDeclaredField(temp[0]);
Method setMethod = obj.getClass().getDeclaredMethod("set" + ZmUtils.initcap(temp[0]),field.getType());
setMethod.invoke(obj,temp[1]);
}catch (Exception e){
e.printStackTrace();
}
}
}
}
class Emp {
private String name;
private String job;
public String getJob() {
return job;
}
public String getName() {
return name;
}
public void setJob(String job) {
this.job = job;
}
public void setName(String name) {
this.name = name;
}
}
- 在上面的代码里面,只适合于String类型的赋值,但是主要的还要很多其他的类型没有考虑,所以当出现了其他类型的时候,这个单级属性赋值就不太合适了,所以,这里我们要进行修改一下:
package 阿里云大学java.java高级学习.反射练习;
import com.sun.deploy.util.StringUtils;
import 阿里云大学java.java基础初级.Emp;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class 单级属性赋值 {
public static void main(String[] args) {
String value = "name:骚包|job:扫厕所|salary:4743.4|date:1999-12-05";
Emp emp = ClassInstanceFactory.create(阿里云大学java.java基础初级.Emp.class,value);
System.out.println("姓名:" + emp.getName() + "、时间:" + emp.getDate());
}
}
class ClassInstanceFactory {
private ClassInstanceFactory(){}
public static <T> T create(Class<?> clazz,String value){
try{
Object obj = clazz.getDeclaredConstructor().newInstance();
BeanUtils.setValue(obj,value);
return (T) obj;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
}
class ZmUtils {
private ZmUtils(){}
public static String initcap(String str){
if(str == null || "".equals(str)){
return null;
}
if(str.length() == 1) {
return str.toUpperCase();
}else{
return str.substring(0,1).toUpperCase() + str.substring(1);
}
}
}
class BeanUtils {
private BeanUtils(){}
public static void setValue(Object obj , String value) {
String[] ans = value.split("\\|");
for(int i=0;i<ans.length;i++){
String[] temp = ans[i].split(":");
try{
Field field = obj.getClass().getDeclaredField(temp[0]);
Method setMethod = obj.getClass().getDeclaredMethod("set" + ZmUtils.initcap(temp[0]),field.getType());
Object val = BeanUtils.getAtttributeValue(field.getType().getName(),temp[1]);
setMethod.invoke(obj,val);
}catch (Exception e){
e.printStackTrace();
}
}
}
public static Object getAtttributeValue(String type,String value){
if("long".equals(type) || "java.lang.Long".equals(type)){
return Long.parseLong(value);
}else if("double".equals(type) || "java.long.double".equals(type)){
return Double.parseDouble(value);
}else if("int".equals(type) || "java.long.int".equals(type)){
return Integer.parseInt(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 {
return new Date();
}
try{
return sdf.parse(value);
} catch (ParseException e){
return new Date();
}
}
return value;
}
}
class Emp {
private String name;
private String job;
private long age;
private double salary;
private Date date;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public long getAge() {
return age;
}
public void setAge(long age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
- 这里我们只是对一部分的数据类型进行了转换,还是存在很多的数据类型,如果我们是在做一个很大的项目的时候,这些所有可能存在的数据类型我们全部都要进行输入;