是否有可能使用字節碼操作來繼承最終的類?是否有可能以某種方式繼承修改字節碼的最終類?
回答
是和否。
您可以使用字節碼操作將final
類更改爲非final
。這甚至不會破壞二進制兼容性,所以不存在類加載器/驗證器錯誤的風險。
但是,您必須將字節碼修改應用於final
類本身。您無法對子類進行字節碼操作,以使其從父類繼承。或者更確切地說,如果你這樣做,修改後的子類將被父類與final
一起加載時拒絕。
如果您需要特定參考 - JVMS第4.1節,第70頁 - 「其超類的任何一個或其任何超級類別都不能在其ClassFile結構的access_flags項目 中設置ACC_FINAL標誌。 – Antimony 2013-02-25 13:58:15
JLS也提到了這個問題 - http://docs.oracle.com/javase/specs/jls/se7/html/jls-13.html#jls-13.4.2 – 2013-02-25 14:46:42
但是這個問題是關於字節碼操作的,在這種情況下JLS是無關緊要的。 Java語言有大量的字節碼級不存在的任意限制。 – Antimony 2013-02-25 14:53:49
This描述了類文件格式。在偏移量10+cpsize
有2個字節定義了這個類的訪問標誌。其中一個標誌叫做ACC_FINAL (0x0010)。我想你可以掩蓋這一點,並讓這個班不是最終的。
- 1. 是否有某種方式不重複的代碼繼承類
- 2. 是否有可能以某種方式排除cfdirectory的文件?
- 3. 是否有可能爲類繼承
- 4. 是否有可能以某種方式增加PK?
- 5. 是否有可能以某種方式修改MS CRM 2011中的值系統維護字段
- 6. 是否有可能以某種方式節制「重複」培根動作?
- 7. 是否有可能以某種方式克服Java中的類型擦除?
- 8. 是否有可能以某種方式更改Facebook評論分組URL?
- 9. 匿名類型是否可以繼承另一種類型?
- 10. 是否有可能以編程方式修改ATS設置
- 11. Mosync:Widget是否可以繼承TimerListener類
- 12. 是否可以修改字節碼並將其保存爲javassist?
- 13. 是否可以繼承MKPolyline
- 14. 是否可以繼承XAML?
- 15. 是否可以繼承NSSavePanel?
- 16. 是否可以繼承System.Net.Mail.Mailmessage?
- 17. 是否有可能重寫沒有繼承的類的drawRect?
- 18. ASN.1是否支持某種形式的繼承?
- 19. JSF 2:是否有可能繼承@ManagedBean?
- 20. 是否有某種方式可以回收Crystal Reports數據集?
- 21. 是否有可能繼承最終功能但創建相同功能(不覆蓋)的派生類?
- 22. 修改繼承類中的select case的最佳方法
- 23. 是否有可能以某種方式撤銷mv命令的結果?
- 24. 所有沒有繼承的類都應該是最終的嗎?
- 25. 是有可能繼承類到@ManagedBean
- 26. 如何修改具有繼承類的類的方法?
- 27. 繼承是否可以影響子類中的方法?
- 28. 是否有可能在JavaScript中繼承ECMAScript 6類中的舊式類?
- 29. Java枚舉繼承:是否有可能以某種方式將枚舉的toString()方法提取到一個通用的超類/枚舉?
- 30. 是否有可能以某種方式同步調用異步Ionic Storage?
不會「組成而不是繼承」解決您的問題?你可以使用包裝類來處理你想要做的事情嗎?請張貼一些細節,如果有這麼少量的信息是很難提供的...(和vikingsteve是對的!) – ppeterka 2013-02-25 12:24:05
'final'通常是有原因的... – vikingsteve 2013-02-25 12:24:33
你試圖繼承?標準庫之一? – 2013-02-25 13:21:17