我試圖創建一個類,通過gen-class
擴展輸入流Clojure。如果我想調用父類的方法,我該怎麼做?如何在Clojure gen-class方法中調用超類的方法?
回答
從(doc gen-class)
:
:exposes-methods {super-method-name exposed-name, ...}
It is sometimes necessary to call the superclass' implementation of an
overridden method. Those methods may be exposed and referred in
the new method implementation by a local name.
因此,爲了能夠調用父類的fooBar
方法,你會說
(ns my.custom.Foo
(:gen-class
; ...
:exposes-methods {fooBar parentFooBar}
; ...
))
然後執行fooBar
:
(defn -fooBar [this]
(combine-appropriately (.parentFooBar this)
other-stuff))
除:gen-class
設施提供的ns
表單外,還有一個gen-class
宏。
感謝您的答案和編輯中的其他信息。該添加的。在調用中是一個重要的細節。 – Bill 2012-01-30 13:12:24
這不是你的實際問題的答案,但我有一個小庫讓你假裝InputStream是一個接口而不是一個類(所以你根本不需要gen-class)。請查看io.core.InputStream
,它可以讓您通知io.core.InputStreamable
並獲得自定義的InputStream。無論您需要哪種實例字段,都可以通過reify
關閉當地人。
有趣的想法。我曾經想過類似的東西,但最終還是希望有一個輸入流,以防我想將這些輸入流交給Java。 – Bill 2012-01-30 13:08:27
重點在於你確實得到了一個輸入流。您創建一個描述您的邏輯的InputStreamable,並將其提供給InputStream,一個AOTed Java類。例如'(InputStream。(reify InputStreamable(read ...)(skip ...)))'。 – amalloy 2012-01-30 18:18:08
@Bill在先前的評論中忘記了@你。我認爲這意味着你沒有得到通知;如果您現在正在收到第二次通知,請致歉。 – amalloy 2012-01-30 19:40:23
- 1. 如何在Clojure中使用genclass擴展Java類時調用超類?
- 2. 如何從超類方法中調用python子類的方法?
- 3. 如何從超類方法調用子類的方法?
- 4. 調用超類的方法
- 5. 調用超類超類的方法
- 6. 如何調用超類的方法
- 7. 如何調用超類的overriden方法?
- 8. 調用超類方法
- 9. 調用超類方法
- 10. 如何在Clojure中調用公共類的非公共方法?
- 11. 如何在Python中的超類中調用子類方法
- 12. 調用超類方法後調用子類方法
- 13. 在實現的抽象方法中調用超類方法
- 14. 抽象基類甚至方法的調用方法在超類
- 15. 超類的子類的調用方法
- 16. 如何從Cocoa中的子類委託方法調用超類委託方法?
- 17. 調用超類的子類方法
- 18. 超類的子類的調用方法
- 19. 如何從clojure調用gen-class方法
- 20. 調用覆蓋方法,超類調用覆蓋方法
- 21. Matlab無法調用超類方法
- 22. 來自重載子類方法的調用超類方法
- 23. 如何從超類的對象中調用子類的方法?
- 24. 如何在方法中調用方法?
- 25. 如何從子類中的超類方法調用?
- 26. Actionscript:從子類調用超類方法
- 27. 從子類工廠方法PHP調用超類工廠方法
- 28. 如何在onCreate方法中調用另一個類的方法?
- 29. 從超類調用子類方法
- 30. 如何重寫java中的方法,然後調用超類方法
這是一個古老的問題,但有時它會得到關注。 FWIW,正如我多年來一直使用Clojure一樣,我發現如果我認爲我需要gen-class的強大功能來完成這樣的事情,那麼只需編寫一點Java就簡單多了。 – Bill 2017-04-02 20:03:54