<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    紀(jì)念SUN

    Powered By Andy

    測(cè)試clone

    package cn.xx

    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.Arrays;

    /**
     * <pre>
     * @Types   role : 測(cè)試clone

     * @Create  time : 2011-12-26 : 上午10:49:39
     * @ver     curr : 1.0
     * </pre>
     */
    public class TestClone implements Serializable{

        private static final long serialVersionUID = -7340886443308126418L;

        /**
         * <pre>
         * @Methods role : 對(duì)象的Clone
         * 注: 要clone對(duì)象必須要實(shí)現(xiàn)Serializable接口, 不然拋NoSerializableException
         * </pre>
         * @param obj
         * @return
         * @throws IOException
         * @throws ClassNotFoundException
         * @Create  time : 2011-12-23 : 下午5:26:57
         * @ver     curr : 1.0
         */
        @SuppressWarnings("unchecked")
        public static <T> T invokeCopy(T obj) throws IOException, ClassNotFoundException{
            //T newObj = null;
            // write object to memory
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(bos);
            oos.writeObject(obj);
            oos.flush();
            
            // read object come from memory
            ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
            ObjectInputStream ois = new ObjectInputStream(bis);
            //newObj = (T)ois.readObject();
            
            //bis.close();
            //oos.close();
            // return clone object
            return (T)ois.readObject();
            
            
        }
        
        /**
         * <pre>
         * @Methods role : 實(shí)現(xiàn)對(duì)象的clone
         * 兩種方案(二選一實(shí)現(xiàn)都可以):
         * 1: 實(shí)現(xiàn)Cloneable接口, 深度clone自己重寫clone()實(shí)現(xiàn),此方法只實(shí)現(xiàn)淺度clone
         * 2: 實(shí)現(xiàn)Serializable接口
         * @param obj
         * @return
         * @throws NoSuchMethodException
         * @throws SecurityException
         * @throws IllegalAccessException
         * @throws IllegalArgumentException
         * @throws InvocationTargetException
         * @throws ClassNotFoundException
         * @throws IOException
         * @throws CloneNotSupportedException
         * @Create  time : 2011-12-26 : 上午10:31:37
         * @ver     curr : 1.0
         * </pre>
         */
        public static<T> T clone(T obj) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, ClassNotFoundException, IOException, CloneNotSupportedException{
            // is null
            if(null == obj) return null;
            
            // is instanceof Cloneable
            if(obj instanceof Cloneable){
                return invokeClone(obj);
            }
            // is instanceof Serializable
            else if(obj instanceof Serializable){
                return invokeCopy(obj);
            }
            
            // is not supported clone
            throw new java.lang.CloneNotSupportedException();
        }

        @SuppressWarnings("unchecked")
        public static <T> T invokeClone(T obj) throws NoSuchMethodException,
                IllegalAccessException, InvocationTargetException {
            Class<? extends Object> classObject = obj.getClass();
            Method method = classObject.getDeclaredMethod("clone");
            return (T)method.invoke(obj);
        }
        
        public static void main(String[] args) throws ClassNotFoundException, IOException {
            String x = "123";
            String v = invokeCopy(x);
            
            String[][] array = {{"1", "2"},{ "3", "2","2","3"},{"V","3"}}, array2;
            
            
            System.out.println(x);
            System.out.println(v);
            array2 = invokeCopy(array);
            System.out.println(Arrays.deepToString(array2));
            
            int[] a = {1,48,2}, b = {1, 20, 19};
            System.out.println("a --- hashCode: " + a.hashCode() + "---b: hashCode:" + b.hashCode());
            b = invokeCopy(a);
            System.out.println(b.hashCode());
            System.out.println(Arrays.toString(b));
            short age = 25;
            Person p = new TestClone(). new Person(1l, "andy", age), ps, pe;
            
            ps = invokeCopy(p);
            
            System.out.println(ps);
            
            try {
                //pe = clone(p);
                pe = invokeClone(p);
                System.out.println(pe);
            } catch (NoSuchMethodException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        class Person implements Serializable{//, Cloneable{
            private static final long serialVersionUID = 7605971168826706980L;
            private Long id;
            private String name;
            private short age;
            
            
            public Person() {
            }
            
            
            public Person(Long id, String name, short age) {
                super();
                this.id = id;
                this.name = name;
                this.age = age;
            }


            public Long getId() {
                return id;
            }
            public void setId(Long id) {
                this.id = id;
            }
            public String getName() {
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
            public short getAge() {
                return age;
            }
            public void setAge(short age) {
                this.age = age;
            }


            public String toString() {
                return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
            }
            
            /*protected Object clone() throws CloneNotSupportedException {
                // TODO Auto-generated method stub
                return super.clone();
            }*/
            
        }
    }

    posted on 2011-12-26 10:54 Powered By Andy 閱讀(261) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    <2011年12月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統(tǒng)計(jì)

    常用鏈接

    留言簿

    隨筆檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲成a人不卡在线观看| 豆国产96在线|亚洲| 免费毛片在线播放| 亚洲精品国产日韩无码AV永久免费网| 亚洲精品午夜无码专区| 精品久久久久久久久免费影院| 国产亚洲精品美女久久久久| 精品国产亚洲一区二区三区| 黄色成人网站免费无码av| 一区视频免费观看| 亚洲一区二区三区久久| 在线a亚洲v天堂网2018| 18级成人毛片免费观看| 有码人妻在线免费看片| 亚洲人成片在线观看| 国产亚洲AV夜间福利香蕉149| 国产在线观看片a免费观看| 黄视频在线观看免费| 亚洲色偷偷偷综合网| 久久久久亚洲精品成人网小说| 四虎成人免费大片在线| 日日麻批免费40分钟无码| 日韩在线一区二区三区免费视频| 亚洲国产精品成人精品软件| 久久精品国产精品亚洲艾草网美妙| 无码人妻一区二区三区免费| 大地资源中文在线观看免费版| 极品色天使在线婷婷天堂亚洲| 91亚洲精品第一综合不卡播放| 亚洲人成电影在线播放| 成人奭片免费观看| 国产国产人免费视频成69堂| 岛国岛国免费V片在线观看| 色偷偷亚洲男人天堂| 亚洲毛片基地4455ww| 久久狠狠高潮亚洲精品| 亚洲va无码手机在线电影| 亚洲真人日本在线| 免费国内精品久久久久影院| 成人免费视频一区二区三区| 91嫩草免费国产永久入口|