JAVA反射demo

import java.lang.reflect.Field;
 
public class CloneUtils {
 
     private static final Class<?>[] BASE_CLASSES = {Integer. class ,String. class , Double. class , Float. class ,
                                                     Boolean. class ,Character. class , Long. class , Short. class , Byte. class };
     
     @SuppressWarnings ( "unchecked" )
     public static <T> T deepClone(T t) throws  Exception{
         Class<T> clazz =(Class<T>) t.getClass();
         T result = clazz.newInstance();
         Field[] fields = clazz.getDeclaredFields();
         for (Field field :fields){
             field.setAccessible( true );
             if (!isBaseClass(field.getType()))
                 field.set(result, deepClone(field.get(t)));
             else field.set(result, field.get(t));   
         }
         return  result;
     }
     private static boolean isBaseClass(Class<?> clazz) {
             for (Class<?> cc : BASE_CLASSES)
                 if (cc.equals(clazz)) 
                     return true
             return false
     }
 
     public static void main(String[] args) throws Exception{
         
         Person p = new Person( "xiaoming" , "nan" );
         IDCard idCard = new IDCard( 11111 , "xx市" );
         p.setIdCard(idCard);
         Person pc = deepClone(p);
         System.out.println(pc.getName());
         
     }
     
}
class Person{
     private String name;
     private String sex;
     private IDCard idCard;
     public IDCard getIdCard() {
         return idCard;
     }
     public void setIdCard(IDCard idCard) {
         this .idCard = idCard;
     }
     Person(){
         
     }
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this .name = name;
     }
     public String getSex() {
         return sex;
     }
     public void setSex(String sex) {
         this .sex = sex;
     }
     Person(String _name,String _sex){
         this .name = _name;
         this .sex  = _sex;
     }
     
     
}
class IDCard {
 
     private Long id;
     private String address;
     public long getId() {
         return id;
     }
     public void setId( long id) {
         this .id = id;
     }
     public String getAddress() {
         return address;
     }
     public void setAddress(String address) {
         this .address = address;
     }
     public IDCard(){
         
     }
     public IDCard( long id, String address) {
         super ();
         this .id = id;
         this .address = address;
     }
}


转载于:https://my.oschina.net/leejayblog/blog/291775

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值