2012-10-16 36 views
4

我需要給websphere一個補丁。我有一個主要的java類,它有三個內部類。我幾乎沒有更改主類的代碼,但沒有更改任何內部類。現在我的問題是,我是否應該將所有內部類與主類文件一起作爲補丁或主類的一部分?將java的外部類編譯效果內部類

+0

這個問題似乎是無稽之談。內部類與外部類在同一個文件中。內部類是主類的一部分,就像方法,變量一樣。所以你不能在技術上給予主要的_alone_。你給改變的文件,就這些。 – Juvanis

+3

@VincenzoSanchez:是的,你可以。內部類在字節碼中並不真正「存在」(即'.class'文件) –

+2

@LukasEder它們是 - 它們是名稱中帶有美元符號的'.class'文件。 – dasblinkenlight

回答

3

這不是一個權威的答案,但我每次做這樣的補丁的時候,我複製所有類(外內部類),即

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文件中的順序。

所以,可以肯定的是,無論如何,這種修補技術是一種非常流氓的技術,我總是複製所有的類。

+0

+1你對匿名類的觀點是特別有價值的。 – dasblinkenlight

+0

如果我們沒有「匿名內部類」,那麼亞當可能是正確的? – VamsiKrishna

+1

@VamsiKrishna:我希望如此,是的。在這種情況下,你只能修補外部類。 –

1

內部類就像普通類,隱式引用外部類,所以我會說只給外部類是安全的如果你真的沒有改變內部類。

+0

如果我們沒有「匿名內部類」,那麼您的觀點是有效的,因爲它會生成始終具有相同名稱的類文件。 – VamsiKrishna

+0

@VamsiKrishna這是正確的。 Lukas提到,改變匿名內部類的創建順序可以在FS中產生不同的類名 –