【发布时间】:2011-02-14 23:38:29
【问题描述】:
Java 为给定接口生成代理类并提供代理类的实例。但是当我们将代理对象类型强制转换为我们的特定对象时,java如何在内部处理这个?这是否被视为特殊情况?
例如我有类OriginalClass,它实现OriginalInterface,当我通过传递OriginalInterface接口创建代理对象Java使用提供的接口中的方法创建代理类ProxyClass并提供这个类的对象(即ProxyClass)。如果我的理解是正确的,请您回答以下问题
- 当我在我的类
OriginalClass中键入ProxyClass的cast 对象时,这是可行的,但是Java 是如何允许这样做的呢?在 instace of 的情况下也一样? - 据我所知,Java 仅使用方法创建代理类,但是当我尝试访问该对象的属性时会发生什么?
- 只有接口方法在代理中实现,但是当我尝试访问不在接口中而只在类中提及的方法时会发生什么?
谢谢, 学生
【问题讨论】:
-
您确定将您的代理转换为 OriginalClass 有效吗?据我了解,如果您为 OriginalInterface 创建了代理,您将无法转换为 OriginalClass
-
很好的问题,并且在强制转换和 instanceof 逻辑中必须有一些代理类型的特殊大小写。如果有人知道要查看 JDK 源代码的哪一部分,我很想看看实际代码。
标签: java proxy dynamic-proxy