[英]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.