java对象万能clone

一般说来,Java的对象必须要实现Cloneable接口才能克隆,如果是自定义的类,只需实现Cloneable接口并在clone()中调用super.clone()即可,但如果是系统提供的类,则无法这样进行克隆。那么对这样的对象有没有方法进行clone呢?

先看一下Object类中clone()部分

protected Object clone() throws CloneNotSupportedException {
        if (!(this instanceof Cloneable)) {
            throw new CloneNotSupportedException("Class " + getClass().getName() +
                                                 " doesn't implement Cloneable");
        }

        return internalClone();
    }

这里面调用的是internalClone(),

private native Object internalClone();

是private修饰的,所以想到用反射来调用:

public static <T> T clone(T o) {
        try {
            Method method = Object.class.getDeclaredMethod("internalClone");
            method.setAccessible(true);
            Object copy = method.invoke(o);
            return (T) copy;
        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
        return o;
    }
这样只要把要克隆的对象作为参数传进来,返回值就是克隆的结果,亲测可用



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值