Java InvocationHandler和Singleton

时间:2011-01-22 09:31:50

标签: java android reflection

我有一个单身对象“MySingle”,我的所有课程都是MySingle.createOrGetInstance();

现在我遇到的问题是我想在调用MySingle中的方法之前做一些方法记录和其他东西,所以我查看了Java InvocationHandler类Source Link

然而问题是现在如何调用单例方法,因为当我使用相同的代码而不是做

DebugProxy.newInstance(new FooImpl());

我这样做

DebugProxy.newInstance(MySingle.createOrGetInstance());但是当我这样做时,当我最终将结果分配给变量`(MySingle sing)时,我得到一个类Cast类。

我在Android上开发但我怀疑这有什么不同:)。

谢谢, 费萨尔阿比德

2 个答案:

答案 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)

对于Android应用程序调试是差异。专为android实现的calss


请参阅此link