簡體   English   中英

如何使用私有構造函數從final類運行該方法?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM