以下是一个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$fn1827$fn1828 无法访问带有修饰符 "public"的类 FooImpl 的成员
在 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>
,同样的操作则可以成功。