Pap*_*sar 3 java generics types class
想象一下,我们有这门课.
public class Actor {...}
Run Code Online (Sandbox Code Playgroud)
然后我们有一个方法需要一个类型的参数:
Class<? extends Class<? extends Actor>[]>
这甚至可能吗?我无法破译它.
是.让我们从内到外工作:
? extends Actor意味着某种东西Actor或任何亚型Actor.Class<? extends Actor>[]表示一个Class<T>对象数组,其中每个对象表示一个Actor或者是其子类型的类Actor.Class<? extends Class<? extends Actor>[]>表示类对象数组的类,其中每个对象是Actor其子类型之一或其子类型之一.*这是一个应该让它更清晰的例子:
//actorClass is a Class<T> object that represents Actor.class
//or any of its subtypes
Class<? extends Actor> actorClass = Actor.class;
//classArray is an array of Class<? extends Actor> objects, and so its type is
//Class<? extends Actor>[]
//You will get a warning about an unsafe cast here because you
//cannot really create an array of generic type, which means the
//RHS type is just `Class[]`.
Class<? extends Actor>[] classArray = new Class[] {
actorClass, actorClass, actorClass
};
//Now we get the class of the array itself, which matches the convoluted
//expression you saw.
Class<? extends Class<? extends Actor>[]> classArrayClass = classArray.getClass();
Run Code Online (Sandbox Code Playgroud)
这里要注意的重要一点是,这个巨大的表达式并不代表一个本身扩展了一个Class<? extends Actor>对象数组的类.取而代之的是,它代表了类的阵列的Class<? extends Actor>对象.
*从技术上讲,你不能创建一个泛型类型的数组,这意味着它Class<? extends Actor>[]只是Class[].所以最终你最终会得到Class<Class[]>,这是代表一个Class对象数组的类(即,只是Class[].class).