2017-09-03 19 views
1

我正在使用一個開源框架(準確地說是libGDX),但是我想編輯一個類的內部行爲並按原樣使用框架的其餘部分。問題是,當我擴展它時,我無法訪問該類的受保護成員。我不知道反思是否是最好的遊戲。該類用於框架的其他類,我也想使用它們。在java開源框架中編輯一個類的最好方法

編輯:發現,委員們只保護(原來的問題包括私有成員),但我不能夠訪問它們封裝外部

+0

如果它的開源,爲什麼不幫助它改善它或叉,而不是瘋了嗎? –

+0

與我的互聯網速度和CPU,我想問我之前我自己編譯該框架 –

+1

一個更好的問題是,爲什麼你想要補丁庫。如果只是訪問一些私人領域 - 嗯,反思可以爲你做到這一點。但我首先想到爲什麼這些領域是第一位的私人領域。如果他們不打算公開使用,那麼不要這樣做是個好主意。開發人員會根據自己的意願完全自由地更改私有實現細節,以便您的聰明黑客可能會在下一個版本的庫中停止工作。 – lexicore

回答

3

三個選項:

  • 您能否提供一個補丁到圖書館背後的社區。試着說服業主改變他們的代碼 - 這樣你的問題就可以用合理的方式解決了
  • 你創建了你自己的私人分支。它是開源的!
  • 是的,你可能可以使用反射。這是最後一次,因爲反射很容易出錯,只要有人開始使用安全管理器就會中斷 - 或者當庫所有者進行更改(如重命名類或字段)時。有關更多詳細信息,請參見here
  • 使用繼承,您必須在您的項目中創建與目標類包名稱匹配的包。在那裏創建子類,以便您可以訪問受保護的成員。 我認爲很明顯哪個選項對你更好 - 儘管最初它意味着更多的工作來說服人們你的想法有價值。

或者,你可能會問自己,如果你的想法真的是一個好主意。也許你只是不明白如何正確使用該庫?但我們不能幫助您給出您當前的輸入...

+0

所以沒有任何其他選項,而是編譯整個框架?(無法說服他們更改代碼,因爲這些更改不會因爲他們的代碼是通用的) –

+1

@MichalLebeda編譯整個框架是你在這條路上遇到的最少的問題。 – lexicore