![](/img/trans.png)
[英]Illegal reflective access by org.powermock.reflect.internal.WhiteboxImpl to method java.lang.Object.clone()
[英]How to make java.lang.Object.clone public?
具体来说:如何修改java.lang.Object.clone
以便在字节码调用JVM时不会发出尖叫声?
您不能修改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
}
}
Peter Lawrey的评论提出了编辑rt.jar
的想法。 这可行。 它也是完全无害的。
(将访问修饰符代码0x0104
0x0101
为rt.jar/java/lang/Object.class
正确位置的0x0101
)
同样,可以构造一个rtplus.jar
包含修改后的类文件的rtplus.jar
,然后使用-Xbootclasspath/p:rtplus.jar
来让java
使用该版本。 (是的,EJP,我们无法分发该rtplus.jar
但以编程方式生成它非常容易)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.