我需要給websphere一個補丁。我有一個主要的java類,它有三個內部類。我幾乎沒有更改主類的代碼,但沒有更改任何內部類。現在我的問題是,我是否應該將所有內部類與主類文件一起作爲補丁或主類的一部分?將java的外部類編譯效果內部類
回答
這不是一個權威的答案,但我每次做這樣的補丁的時候,我複製所有類(外和內部類),即
Outer.class
Outer$1.class // These indexes might change ...
Outer$2.class // ... between compilation runs
Outer$Inner.class // This name should never change
當我沒有做到這一點,有通常是一些晚班加載副作用。在我看來,這通常是因爲匿名內部類,它們並不總是重新生成相同的「匿名類索引」(如在$1
,$2
等中),具體取決於它們在.java
文件中的順序。
所以,可以肯定的是,無論如何,這種修補技術是一種非常流氓的技術,我總是複製所有的類。
+1你對匿名類的觀點是特別有價值的。 – dasblinkenlight
如果我們沒有「匿名內部類」,那麼亞當可能是正確的? – VamsiKrishna
@VamsiKrishna:我希望如此,是的。在這種情況下,你只能修補外部類。 –
內部類就像普通類,隱式引用外部類,所以我會說只給外部類是安全的如果你真的沒有改變內部類。
如果我們沒有「匿名內部類」,那麼您的觀點是有效的,因爲它會生成始終具有相同名稱的類文件。 – VamsiKrishna
@VamsiKrishna這是正確的。 Lukas提到,改變匿名內部類的創建順序可以在FS中產生不同的類名 –
- 1. 的Java內部類陰影外部類
- 2. 靜態內部類編譯結果
- 3. Java:編譯內部相關類
- 4. 外部類內部類 - 實例化內部類作爲外部類的成員
- 5. 如果內部類擴展外部類,內部類的不同成員行爲?
- 6. Java泛型類,使用外部類參數的內部類
- 7. Java:內部類中的內部類
- 8. 訪問外部類的內部類
- 9. 如何將內部類移到外部
- 10. 如何用內部類來編譯java類?
- 11. 從Java的內部類訪問外部類「超級」
- 12. 的Java內部類
- 13. Qt C++內部類訪問外部類
- 14. 內部類引用外部類實例
- 15. 內部類和外部類在c#
- 16. 內部類訪問外部類成員
- 17. 爪哇 - 內部的內部類陣列外部類
- 18. 有2個類和外部庫的JAVA編譯問題
- 19. Java從內部類單例中訪問外部類變量
- 20. 當訪問外部類參考時,java內部類出錯
- 21. java線程從靜態內部類訪問外部類
- 22. Java:在匿名內部類中調用外部類方法
- 23. Java從內部類中獲取外部類?
- 24. Java - 內部類構造函數 - 只允許外部類
- 25. Java外部類訪問內部類接口常量
- 26. Java內部類訪問外部類變量
- 27. 在外部類中使用內部類對象java
- 28. 用Point作爲外部類編碼內部類
- 29. 如何將內部類的值返回給外部類?
- 30. C++內部類無法編譯
這個問題似乎是無稽之談。內部類與外部類在同一個文件中。內部類是主類的一部分,就像方法,變量一樣。所以你不能在技術上給予主要的_alone_。你給改變的文件,就這些。 – Juvanis
@VincenzoSanchez:是的,你可以。內部類在字節碼中並不真正「存在」(即'.class'文件) –
@LukasEder它們是 - 它們是名稱中帶有美元符號的'.class'文件。 – dasblinkenlight