例如,給定一個Java類,如:如何在Clojure中使用重載方法代理Java類?
public class Foo {
public String bar(String x) {
return "string " + x;
}
public String bar(Integer x) {
return "integer " + x;
}
}
我怎麼能繼承美孚Clojure中和只覆蓋了吧(String)方法,但重用原來的Foo類的吧(整數)。事情是這樣的(但是這不會工作):
(let [myFoo (proxy [Foo] []
(bar [^String x] (str "my " x)))]
(println "with string: " (.bar myFoo "abc"))
(println "with integer: " (.bar myFoo 10)))
這個例子會打印:
with string: my abc
with integer: my 10
,但我想獲得的效果:
with string: my abc
with integer: integer 10
我沒有答案,但你的問題激發我讀「proxy_core.clj」,這讓我稍微聰明一些,所以謝謝! :) – 2011-05-19 12:17:26
我其實也是這麼做的。如果其他人感興趣'proxy_core.clj'是[here](https://github.com/clojure/clojure/blob/master/src/clj/clojure/core_proxy.clj)。 – 2011-05-19 14:11:12