gpt4 book ai didi

Java IncationHandler 和 Singleton

转载 作者:行者123 更新时间:2023-12-02 08:24:40 26 4
gpt4 key购买 nike

我有一个单例对象“MySingle”,我在所有类中将其检索为 MySingle.createOrGetInstance();

现在我遇到的问题是,我想在调用 MySingle 中的方法之前执行一些方法日志记录和其他操作,因此我查看了 Java InitationHandler 类 Source Link

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

DebugProxy.newInstance(new FooImpl());

我这样做

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

我正在 Android 上进行开发,但我怀疑这有什么区别:)。

谢谢,费萨尔·阿比德

最佳答案

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

A dynamic proxy class (simply referred to as a proxy class below) is a class that implements a list of interfaces specified at runtime when the class is created, with behavior as described below.

@参见: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仅实现该类的接口(interface)。因此,将为 MySingle 类创建的 java.lang.reflect.Proxy 强制转换为 class 必须 MySingle因类转换异常而失败,因为 Proxy 不是 MySingle 的子类。

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

关于Java IncationHandler 和 Singleton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4767123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com