首页 > 解决方案 > 是什么意思?

问题描述

我在维护的代码中遇到了这个类:

new GenericFutureListener<Future<? super Void>>() {...}

我很难理解这意味着什么。AFuture包含一个类型,Void或者它的超类 - Object。那么为什么不直接写Future<Object>呢?

标签: javagenerics

解决方案


没有人指出的东西:它是 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>>处理任何值;Object2. 因为 aVObject它可以处理的V。因此它可以听一个Future<V>. 显然,对于任何超类型 ofV而不是 也是如此Object

当然,如果 Java 有声明站点变量,这些签名会简单得多,但它没有,而且可能不会很快出现。


推荐阅读