Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java调用处理程序和单例_Java_Android_Reflection - Fatal编程技术网

Java调用处理程序和单例

Java调用处理程序和单例,java,android,reflection,Java,Android,Reflection,我有一个单例对象“MySingle”,在我的所有类中,我都将其重新定义为MySingle.createOrGetInstance() 现在我遇到的问题是,在调用MySingle中的方法之前,我想做一些方法日志记录和其他工作,所以我研究了Java InvocationHandler类 但是现在的问题是,我应该如何调用singleton方法,因为当我使用相同的代码而不是 DebugProxy.newInstance(new FooImpl()); 我这样做 DebugProxy.newInstan

我有一个单例对象“MySingle”,在我的所有类中,我都将其重新定义为
MySingle.createOrGetInstance()

现在我遇到的问题是,在调用MySingle中的方法之前,我想做一些方法日志记录和其他工作,所以我研究了Java InvocationHandler类

但是现在的问题是,我应该如何调用singleton方法,因为当我使用相同的代码而不是

DebugProxy.newInstance(new FooImpl());
我这样做

DebugProxy.newInstance(MySingle.createOrGetInstance())
我在安卓上开发,但我怀疑这有什么区别:)

谢谢,
费萨尔·阿比德(Faisal abid)

针对android应用程序的调试是为android专门实现的diff.calss



查看此

对于普通java应用程序(我不知道android),它将失败,因为
java.lang.reflect.Proxy
仅适用于接口

动态代理类(以下简称为代理类)是一个类,在创建该类时实现运行时指定的接口列表,其行为如下所述

@见:

在您的例子中,来自java反射guid()的DebugProxy使用java.lang.reflect.Proxy

在您的代码中,
MySingle
是一个类,但是
java.lang.reflect.Proxy
只实现这个类的接口。因此,将为类
MySingle
创建的
java.lang.reflect.Proxy
强制转换到类必须
MySingle
失败,因为该代理不是
MySingle
的子类

一个可行的方法是:引入一个接口MySingle并实现一个类MySingleImpl(使用getInstance方法),然后在任何地方(除了创建)使用该接口