有趣。让我们给这个类型一个更短的名字“CCA”
CCA = Class<? extends Class<? extends Actor>[]>
扩展第一个通配符,
CCA = all Class<T> where T <: Class<? extends Actor>[]
对于数组子类型,我们必须有
T = A[] where A <: Class<? extends Actor>
因此
CCA = all Class<A[]> where A <: Class<? extends Actor>
如果我们探究Class 是final 的事实,那么A 一定是
A = Class<C> or Class<? extends C> where C <: Actor
因此
CCA = all Class<Class<C>[]> and Class<Class<? extends C>[]> where C<:Actor
意思是,CCA 涵盖了表示数组的类对象,如Class<Actor>[]、Class<BadActor>[]、
Class<? extends BadActor>[]等
另一方面 ...我们知道T不能是Class<T>中的任意类型。虽然语法上Class<List<String>> 是有效的,但List<String> 确实没有类;只有类List;因此只有Class<List> 有意义。
而且...对于数组,即使有List<String>[]、List<Integer>[]这样的编译时类型,也只有一个运行时类,对应List[]。
因此,CCA 真的只是Class<Class[]>;这种类型只有一个对象 - Class[].class,即表示数组类型 Class[] 的类。
给定一个 CCA 类型的对象,你可以用它做任何有趣的事情。我很想知道您在哪里看到过这种类型,以及实际用例是什么。