以下Java代码为例
`
public interface IFoo {
String getBar();
}
class FooImpl {
String getBar() { return "bar"; }
}
`
按照当前实现,{{(bean my-foo)}}尝试调用以下
(. #<Method public java.lang.String FooImpl.getBar> (invoke my-foo nil))
然而,由于{{FooImpl}}不是公共类,所以失败了
`
java.lang.IllegalAccessException: 类 clojure.core$bean$fnstrong1827$fnstrong1828 无法访问具有"public"修饰符的类 FooImpl 的成员
at sun.reflect.Reflection.ensureMemberAccess (Reflection.java:65)
java.lang.reflect.Method.invoke (Method.java:588)
clojure.core$bean$fn__1827$fn__1828.invoke (core_proxy.clj:382)
clojure.core$bean$v__1832.invoke (core_proxy.clj:388)
clojure.core$bean$fn__1838$thisfn__1839$fn__1840.invoke (core_proxy.clj:406)
clojure.lang.LazySeq.sval (LazySeq.java:42)
clojure.lang.LazySeq.seq (LazySeq.java:60)
clojure.lang.RT.seq (RT.java:473)
`
但是,如果我们调用 #<Method public java.lang.String Foo.getBar>
而不是 #<Method public java.lang.String FooImpl.getBar>
,相同的操作可以成功。