gpt4 book ai didi

java - 在 Java 中,cast(即(ClassName))的实例和类型如何作用于代理对象?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:32:11 25 4
gpt4 key购买 nike

Java 为给定的接口(interface)生成代理类,并提供代理类的实例。但是当我们将代理对象类型转换为我们特定的对象时,java 是如何在内部处理的呢?这是否被视为特殊情况?

例如,我有类 OriginalClass 并且它实现了 OriginalInterface,当我通过传递 OriginalInterface 接口(interface)创建代理对象时,Java 创建了代理类 ProxyClass 使用提供的接口(interface)中的方法并提供此类的对象(即 ProxyClass)。如果我的理解是正确的,请您回答以下问题

  1. 当我将 ProxyClass 的转换对象键入到我的类 OriginalClass 时,这是有效的,但 Java 如何允许这样做?在实例的情况下是否相同?
  2. 据我所知,Java 仅使用方法创建代理类,但是当我尝试访问该对象的属性时会发生什么情况?
  3. 代理中只实现了接口(interface)方法,但是当我尝试访问不在接口(interface)中且仅在类中提及的方法时会发生什么情况?

谢谢,学生

最佳答案

Java 不允许从代理转换为具体类。 JDK 代理(java.lang.reflect.Proxy)只是接口(interface)的代理。生成的代理是 ProxyX 类型(X 是一个数字),如果您尝试将其转换为任何类,您将得到 ClassCastException

因此,您的第二个和第三个问题不相关 - 代理不受具体类的支持。为此,您可以使用其他代理机制 - CGLIB 或 javassist。它们使用动态子类化,因此子类(代理)可以访问所有 protected(及以上)字段和方法。

关于java - 在 Java 中,cast(即(ClassName))的实例和类型如何作用于代理对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2757314/

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