《编程导论(Java)·9.3.1回调·3》回调的实现

接《9.3.1Java回调 ·1》(概念)和《编程导论(Java)·9.3.1回调·2》什么是好莱坞法则

本文改写《回调·3》,因为Java8引入了Lambda Expressions



★一个回调函数/回调方法(简称回调、callback)是上层模块实现的,将被下层模块(反过来)“执行”的方法。

【回调,或隐式调用Implicit invocation(某些软件架构的作者使用的术语)

例子:上层Client需要更新进度条——显示复制任务完成的进度时,下层模块Server如何将进度数据传递给上层的Client呢?

通常有两种解决方案: ①轮询;②回调或通知。

【书上的图9-12,在一个包中定义了4个类型,按照分层的要求,应该把代码分别放在不同包中——这里修改了书上的相关内容(包括代码)。但是我就不方便截图了。】

在图9-11中,Client定义的方法callback(int),将被Server这个被调用者反过来调用。请注意图中的分层线,通常下层模块Server不知道上层定义的接口也不应该/能够直接调用上层接口。如何解决这个小问题呢?可以在公共模块/下层模块中设计一个抽象类或接口如IXxx,定义回调方法的规范,而Server调用公共模块IXxx的抽象方法callback(int)即可。换言之,Server不能够调用上层模块的方法,那么调用本层的IXxx的方法总是可以的。类型之间的关系如图9-12所示。


【不好画图啊,先这样将就一下】图9-12及下面的例程说明了Java中使用回调的基本结构。它由上层模块Client、TestCallback和下层被调用者Server和公共模块IClient组成。Client的callback(int) 方法被称为回调。而IClient定义的抽象方法callback(int) 被称为回调接口,大多数情况下,回调接口也简称回调。(书上原文:注意:通常公共模块、上层模块和下层模块均有自己的包,这里简单地将它们全部放在同一个包API.event中,仅仅为了方便地查看相关代码。在实践中&#x

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误信息的意思是,在使用9.3.1版本的程序加载9.4.2版本的文件时,出现了无法加载的问题。可能是由于版本不兼容或者文件损坏导致的。建议检查一下程序版本和文件版本是否兼容,如果文件完整性有问题,可以尝试重新下载一份。 ### 回答2: 9.3.1>9.4.2提示无法加载文件可能是由于以下几个原因造成的。 首先,可能是文件路径错误导致无法加载文件。在程序中,我们通常需要指定文件的路径来加载文件,如果路径错误,系统将无法找到文件并进行加载。这可能是因为文件被移动或删除,或者指定的路径和文件实际存储位置不匹配。解决这个问题的方法是检查文件路径是否正确,并确保文件存在于指定的路径中。 其次,可能是文件格式不受支持导致无法加载文件。不同的文件有不同的格式,一些程序只能加载特定格式的文件。如果尝试加载的文件格式不被程序支持,系统将无法正确加载文件。解决这个问题的方法是确认文件格式是否受程序支持,并将文件转换为可支持的格式。 另外,可能是文件受损或损坏导致无法加载文件。在文件传输或存储的过程中,文件可能会受到损坏或损坏,导致无法正确加载文件。解决这个问题的方法是尝试使用其他工具或方法来修复或还原文件,或者使用备份文件替代损坏的文件。 最后,可能是权限问题导致无法加载文件。在某些情况下,系统可能对文件访问权限进行限制,导致无法加载文件。解决这个问题的方法是检查当前用户的权限,并确保具有足够的权限来加载文件。如果没有足够的权限,可以尝试以管理员身份运行程序,或者联系系统管理员以获取权限访问。 总之,9.3.1>9.4.2提示无法加载文件可能是由于文件路径错误、文件格式不受支持、文件损坏或损坏以及权限问题等原因造成的。根据具体情况,可以采取相应的措施来解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值