Ale*_*ler 12 java proxy clojure
例如,给定一个Java类,如:
public class Foo {
public String bar(String x) {
return "string " + x;
}
public String bar(Integer x) {
return "integer " + x;
}
}
Run Code Online (Sandbox Code Playgroud)
我如何在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)))
Run Code Online (Sandbox Code Playgroud)
这个例子将打印:
with string: my abc
with integer: my 10
Run Code Online (Sandbox Code Playgroud)
但我希望得到以下效果:
with string: my abc
with integer: integer 10
Run Code Online (Sandbox Code Playgroud)
我猜这不是您的意思,但与此同时,您可以显式检查参数的类型并用于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)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1047 次 |
| 最近记录: |