我正在阅读myBatis的一行源代码:
Set<Class<? extends Class<?>>> typeSet = resolverUtil.getClasses();
我不明白什么是Class<? extends Class<?>>
?
类型?
如何扩展Class<?>
?所以它会自我扩展吗?
答案 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<>;