java - 是什么意思?
问题描述
我在维护的代码中遇到了这个类:
new GenericFutureListener<Future<? super Void>>() {...}
我很难理解这意味着什么。AFuture
包含一个类型,Void
或者它的超类 - Object
。那么为什么不直接写Future<Object>
呢?
解决方案
没有人指出的东西:它是 Netty,如果你看一下https://netty.io/4.0/api/io/netty/util/concurrent/class-use/Future.html你会发现有一些方法只是库中的这种类型,例如ChannelPromise.addListener(GenericFutureListener<? extends Future<? super java.lang.Void>> listener)
. 由于通用情况,这些方法具有此签名:Future.addListener(GenericFutureListener<? extends Future<? super V>> listener)
. ChannelPromise
只是扩展Future<Void>
。
通用案例是有道理的,因为 1. 如果你有 a ,它可以在未来完成时FutureListener<Future<Object>>
处理任何值;Object
2. 因为 aV
是Object
它可以处理的V
。因此它可以听一个Future<V>
. 显然,对于任何超类型 ofV
而不是 也是如此Object
。
当然,如果 Java 有声明站点变量,这些签名会简单得多,但它没有,而且可能不会很快出现。
推荐阅读
- c++ - 如何忽略数据c ++中的逗号
- css - 如何将零宽度元素的文本水平居中?
- ruby-on-rails - 如何在 Webpack Rails 项目中初始化 Bootstrap Popover
- android - 具有区块链存储的普通 Android/Windows 应用程序
- html - Discord 链接嵌入 GitHub 页面
- android - sbn.getNotification().extras.get("last_row_id")) 返回最后一个值 null
- python - 如何将字符串发送到python文件并使用终端显示它
- sql - 仅根据 Redshift 中的开始日期生成日期递增的行
- javascript - 提交后隐藏整个表格?(WooCommerce / WordPress - 管理仪表板)
- android - Log.d 无法在 Android Studio 中记录全部消息