Set <Class <是什么?扩展Class <?>>> typeSet = resolverUtil.getClasses();

时间:2019-12-18 12:25:52

标签: java types mybatis

我正在阅读myBatis的一行源代码:

Set<Class<? extends Class<?>>> typeSet = resolverUtil.getClasses();

我不明白什么是Class<? extends Class<?>>

类型?如何扩展Class<?>?所以它会自我扩展吗?

1 个答案:

答案 0 :(得分:1)

? extends Class<?>表示扩展类java.lang.Class的任何类。但是,这是多余的,因为java.lang.Class被声明为final,因此无法扩展(至少在Java的当前版本和过去的版本中)。
因此声明可以安全地简化为

Set<Class<Class<?>>> typeSet = resolverUtil.getClasses();

编辑

myBatis类ResolverUtil中方法的签名如下:

public Set<Class<? extends T>> getClasses()

是的,ResolverUtil本身已被参数化。它接受一个通用参数T,它是一个可能具有子类的类。 getClasses()将返回Class的部分或全部类型层次结构的类型(T对象)。该问题所在的行将是以下声明的结果:

ResolverUtil<class<?>> resolverUtil = new ResolverUtil<>;