[英]How can I proxy a Java class with overloaded methods in Clojure?
例如,給定一個Java類,如:
public class Foo {
public String bar(String x) {
return "string " + x;
}
public String bar(Integer x) {
return "integer " + x;
}
}
我如何在Clojure中子類化Foo並僅覆蓋bar(String)方法,但重用原始Foo類中的bar(Integer)。 像這樣的東西(但這不起作用):
(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-super
來調用Foo
上的原始方法。
(let [myFoo (proxy [Foo] []
(bar [x]
(if (instance? String x)
(str "my " x)
(proxy-super bar x))))]
(println "with string: " (.bar myFoo "abc"))
(println "with integer: " (.bar myFoo 10)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.