我在這裏有一個庫和一些Java類。一個類有一些protected static
方法,我認識到的是一個OOP no-no,但我不能更改它的代碼。假設我有一個Scala類,它是上述Java類的子類,我怎樣才能調用它的受保護靜態成員?從Scala調用受保護的靜態Java方法
回答
參見Frequently Asked Questions - Java Interoperability:
這是Scala中的一個已知的限制: 沒有 '靜態' 成員 Scala中的概念。相反,Scala將Y類的靜態成員看作是單例對象Y(類Y的 伴隨對象)的成員 。 Y類的當 從這個類繼承,可以 只能訪問受保護的成員,但不能訪問受保護的成員對象Y的
有沒有辦法斯卡拉可以模擬 靜而不影響Scala的對象模型的 完整性保護在 的基本方式,所以這是不是 改變。要解決此限制,必須創建一個 帶有Java代碼的封裝類 的實現,該代碼封裝了對受保護的靜態內部類 的所有訪問。
更多 信息和 限制和其解決方法一個具體的例子見ticket #1806。
「經常」提問的問題很少提出,很少有人注意到它的存在。 :-) – 2010-12-15 11:04:32
哈哈,確實:) – 2010-12-15 11:17:28
JFYI,這是固定在2.10.0-M2 – OlegYch 2012-03-12 05:50:07
- 1. PHP從靜態方法訪問對象的受保護屬性
- 2. Java靜態方法調用
- 3. Java中受保護的方法?
- 4. Java中的受保護方法
- 5. 如何訪問其他包的靜態方法(ex main方法)中受保護的繼承非靜態方法?
- 6. Scala:使用伴侶對象的父級的受保護方法
- 7. java中的靜態方法可以調用非靜態方法
- 8. Junit受保護的方法
- 9. 受保護的方法
- 10. 如何在scala中使用受保護的方法jvm
- 11. 調用從靜態方法
- 12. 爲什麼不能從靜態方法獲得受保護的setter屬性?
- 13. scala覆蓋靜態Java方法
- 14. 的Java:從靜態方法
- 15. 的Java:從靜態方法
- 16. 從Python中的靜態方法調用非靜態方法
- 17. Java:從對象靜態類使用鑄造披露受保護的值
- 18. C#4.0 - 調用一個動態對象調用受保護的方法TryInvokeMember()?
- 19. JAVA:知道從哪裏調用靜態方法的方法/類
- 20. 從靜態方法調用UserControl方法
- 21. 訪問對象保護的靜態字段從它自身的靜態方法
- 22. 不受約束的方法錯誤而調用靜態方法
- 23. Java:簡單的方法來公開受保護的方法
- 24. Java - 受保護的方法不能從子類訪問
- 25. 從受保護的Java方法返回地圖
- 26. 用受保護的方法裝飾類
- 27. 用Java調用非靜態方法Toasts
- 28. 從靜態方法調用非靜態方法
- 29. 如何從靜態方法調用非靜態方法android
- 30. 從另一個靜態方法中調用靜態方法
是不是一個選項來創建一個調用超類方法的Java子類?然後你可以讓你的Java類可以被Scala訪問。 – Madoc 2010-12-15 00:55:14
啊,是的,我想我可以走這條路。謝謝。似乎有點奇怪,但它不可能直接! – 2010-12-15 00:57:59
也許它可能更直接在Scala中,我不知道。這就是爲什麼我發佈這個評論而不是答案。顯然,「超級」調用不能工作,因爲Scala沒有靜態繼承。也許你可以創建一個擴展有問題的類的Scala對象,然後調用「LibraryClassName.staticMethodName(...)」,從而避免使用「超級」?我不確定這是否可行。 – Madoc 2010-12-15 01:10:15