我有一个单身对象“MySingle”,我的所有课程都是MySingle.createOrGetInstance();
现在我遇到的问题是我想在调用MySingle中的方法之前做一些方法记录和其他东西,所以我查看了Java InvocationHandler类Source Link
然而问题是现在如何调用单例方法,因为当我使用相同的代码而不是做
DebugProxy.newInstance(new FooImpl());
我这样做
DebugProxy.newInstance(MySingle.createOrGetInstance());
但是当我这样做时,当我最终将结果分配给变量`(MySingle sing)时,我得到一个类Cast类。
我在Android上开发但我怀疑这有什么不同:)。
谢谢, 费萨尔阿比德
答案 0 :(得分:2)
对于普通的java应用程序(我不知道android)它会失败,因为java.lang.reflect.Proxy
只适用于接口!
动态代理类(下面简称为代理类)是一个实现创建类时在运行时指定的接口列表的类,其行为如下所述。
@see:Proxy Java Doc
在您的情况下,来自java反射guid(http://download.oracle.com/javase/1.3/docs/guide/reflection/proxy.html)的DebugProxy使用java.lang.reflect.Proxy!
在您的代码中MySingle
是一个类,但java.lang.reflect.Proxy
只实现此类的接口。因此,为{strong>类生成为java.lang.reflect.Proxy
创建的MySingle
必须MySingle
因类强制转换异常而失败,因为代理不是子类MySingle
。
一个可行的workarround:将生成一个接口MySingle并实现一个类MySingleImpl(使用getInstance方法),然后在任何地方(创建除外)使用该接口。
答案 1 :(得分:0)