如何使java.lang.Object.clone公开?

时间:2011-12-20 09:31:01

标签: java jvm

具体来说:如何修改java.lang.Object.clone以便JVM在字节码调用时不会发出尖叫声?

2 个答案:

答案 0 :(得分:4)

您无法修改java.lang.Object.clone()。您可以覆盖clone()以使其成为您定义的任何类中的公共方法,尽管除非声明类(或其层次结构中的某些类)实现Cloneable接口,否则它是无用的

public class MyClass implements Cloneable {
    public Object clone() {
        return super.clone();
    }
}

复制的另一种常用方法是定义复制构造函数:

public class MyClass {
    public MyClass() {
        // standard default constructor
    }

    public MyClass(MyClass other) {
        // copy constructor -- initialize from values in other
    }
}

答案 1 :(得分:2)

Peter Lawrey的评论提出了编辑rt.jar的想法。这有效。它也是完全无害的。

(将访问修饰符代码0x0104更改为0x0101中正确位置的rt.jar/java/lang/Object.class

同样,可以构建仅包含修改后的类文件的rtplus.jar,并使用-Xbootclasspath/p:rtplus.jarjava使用该版本。 (是的,EJP,我们不能分发那个rtplus.jar但是很容易以编程方式生成)