的Java類非最終我有以下一個類似的Java類:使通過反射API
public final class Node {
public Node() {}
}
我已經學會已經如何改變通過反射API改變「最終」字段的可訪問性,但這對類也是可能的嗎? 我可以在運行時將最終類變爲非最終類嗎?
的Java類非最終我有以下一個類似的Java類:使通過反射API
public final class Node {
public Node() {}
}
我已經學會已經如何改變通過反射API改變「最終」字段的可訪問性,但這對類也是可能的嗎? 我可以在運行時將最終類變爲非最終類嗎?
您可以使用類似ASM的庫重新編寫類文件。
在運行時改變類的狀態可能沒有意義,因爲它在編譯時需要是非最終的,以編譯子類。
我不明白這是如何工作的,因爲編譯器會檢查你在編譯時是否試圖做非final的類。如果你嘗試從它繼承,你會得到一個錯誤。
我認爲可以問這個問題,如果你好奇,但要問自己的更大的問題是你爲什麼要這麼做?反思可以讓你做很多事情來解決最終的,私人的等問題,但這並不意味着這是一個好主意。如果第三方圖書館的設計者認爲最終決定是一個好主意,那麼最好建議您尊重這一點。
我不知道user982247的用例是什麼,但是試圖代理一個對象是一個原因,人們可能想要在運行時嘗試將某個類更改爲非final,而沒有任何編譯時問題。 –