[英]How to run the method from final class with private constructor?
如何在A類中運行方法foo()而不對此類進行任何更改
public final class A{
private A(){
System.exit(0);
}
public void foo(){
System.out.println("from foo");
}
}
沒有做像使用反射或字節碼操作來搞亂可訪問性......
執行此操作的“正確”方法是以其他方式獲取類的實例。 例如,如果存在靜態工廠方法或可以訪問的預制實例。 擁有這樣的私有構造函數的原因是控制類的構造。 (例如,枚舉實現具有私有構造函數,因此除了提供的靜態構造之外,您不會創建其他實例。)
如果你支持這一點,那么有人 (你或者是原作者)做錯了什么。
您可以在不調用構造函數的情況下創建類的實例。 看到這個問題: 是否可以在不調用構造函數的情況下在Java中創建對象的實例?
您可以使用objenesis為您執行此操作。 一旦你有一個A
的實例而沒有調用構造函數,調用foo
很容易。
您可以在jvm加載之前更改字節代碼。 這是一個可以開始的地方: http : //www.ibm.com/developerworks/java/library/j-dyn0916/index.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.