具体来说:如何修改java.lang.Object.clone
以便JVM在字节码调用时不会发出尖叫声?
答案 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.jar
让java
使用该版本。 (是的,EJP,我们不能分发那个rtplus.jar
但是很容易以编程方式生成)