sinat_36027429 2018-09-20 04:41 采纳率: 100%
浏览 615
已采纳

在看书《Java核心技术I》,在代理那章有一个关于InvocationHandler的问题没看懂,望大神能解释一下。

书上内容:
6.5.2 创建代理对象 要想创建一个代理对象,需要使用 Proxy类的 newProxylnstance方法。这个方法有三个
参数:
•一个类加栽器(class loader)。作为 Java 安全模型的一部分,对于系统类和从因特网 上下载下来的类,可以使用不同的类加载器。有关类加载器的详细内容将在卷 章中讨论。目前,用 null 表示使用默认的类加载器。 •一个 Class对象数组,每个元素都是需要实现的接口。
n 第 9
•一个调用处理器。 还有两个需要解决的问题。如何定义一个处理器? 能够用结果代理对象做些什么? 当
然,这两个问题的答案取决于打算使用代理机制解决什么问题。使用代理可能出于很多原 因,例如:
•路由对远程服务器的方法调用。 •在程序运行期间,将用户接口事件与动作关联起来。 •为调试,跟踪方法调用。 在示例程序中,使用代理和调用处理器跟踪方法调用,并且定义了一个 TraceHander 包 装器类存储包装的对象。其中_的 invoke方法打印出被调用方法的名字和参数,随_后用包装好的对象作为隐式参数调用这个方法。
class TraceHandler implements InvocationHandler
{
private Object target ;
public TraceHandler(Object t)
{
target = t;
}
public Object invoke(Object proxy, Method m, Object[] args)
throws Throwable
{
// print method name and parameters
// invoke actual method
return m.invoke(target , args) ;
}
}

问题:我不理解为什么invoke()可以打印出被调用的方法的名字和参数;
因为我看在这本书的解释里,invoke()只是起到类似C语言中函数指针的功能;这段代码里我找不到关于打印输出的内容,可能是我因为不知道调用处理器的工作方式,望大神能解释一下;

  • 写回答

3条回答 默认 最新

  • sinat_36027429 2018-09-21 08:34
    关注

    好了,找到答案了。。原来以上不是完整代码,原书代码中间有个省略号,完整代码在后面几页有给出。。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 前后端分离的学习疑问?
  • ¥15 stata实证代码答疑
  • ¥15 MATLAB数据处理插值
  • ¥50 husky+jaco2实现在gazebo与rviz中联合仿真
  • ¥15 dpabi预处理报错:Error using y_ExtractROISignal (line 251)
  • ¥15 在虚拟机中配置flume,无法将slave1节点的文件采集到master节点中
  • ¥15 husky+kinova jaco2 仿真
  • ¥15 zigbee终端设备入网失败
  • ¥15 金融监管系统怎么对7+4机构进行监管的
  • ¥15 硬件IIC从模式的数据发送,中断数据的接收,不能用HAL库(按照时序图)