通用代码段中ParameterizedType的含义

天空人

为这个简单的问题表示歉意,但是我遇到了以下代码段(是对另一个问题的回答),但我真的不明白ParameterizedTypethis.entity行的含义是什么?我猜想它正在将类键入为T,但是我自己无法解释代码。

public class GenericDaoJpaImpl<T, PK extends Serializable> implements GenericDao<T, PK> {

    protected Class<T> entityClass;

    @PersistenceContext
    protected EntityManager entityManager;

    public GenericDaoJpaImpl() {
        ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
        this.entityClass = (Class<T>) genericSuperclass.getActualTypeArguments()[0];
    }
斑鸠

getGenericSuperclass

返回表示该类表示的实体的直接超类的Type(类,接口,原始类型或void)。如果超类是参数化类型,则返回的Type对象必须准确反映源代码中使用的实际类型参数。如果以前没有创建过代表超级类的参数化类型,则会创建该参数化类型。有关参数化类型的创建过程的语义,请参见ParameterizedType的声明。如果该Class表示Object类,接口,原始类型或void,则返回null。如果此对象表示数组类,则返回表示Object类的Class对象。

getGenericSuperclass方法返回类型对象,在这种情况下为ParameterizedType。ParameterizedType是实际的Java类,是反射包的一部分。

ParameterizedType表示参数化类型,例如Collection。如该程序包中所指定的,在反射方法第一次使用参数化类型时会创建该参数化类型。创建参数化类型p时,将解析p实例化的通用类型声明,并以递归方式创建p的所有类型参数。有关类型变量的创建过程的详细信息,请参见TypeVariable。重复创建参数化类型无效。

实现此接口的类的实例必须实现equals()方法,该方法使共享相同泛型类型声明并具有相同类型参数的任何两个实例相等。

然后调用ParameterizedType.getActualTypeArguments

返回一个Type对象数组,该数组代表此类型的实际类型参数。请注意,在某些情况下,返回的数组为空。如果此类型表示嵌套在参数化类型内的非参数化类型,则可能会发生这种情况。

因此,总结一下代码,该GenericDaoJpaImpl方法将获取其自身的超类,然后从该类中提取实际的Type信息,在这种情况下,该信息仅是第一个元素。如果查看类定义,您将看到它以通用类型'T'声明。因此,该方法将提取用于该类实例的T的实际Type。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通用代码段中ParameterizedType的含义

来自分类Dev

C代码段的含义

来自分类Dev

以下Java代码段的含义

来自分类Dev

R中代码段的含义

来自分类Dev

该代码段的含义是什么?

来自分类Dev

如何在Java中获取ParameterizedType的通用容器类

来自分类Dev

如何在Java中获取ParameterizedType的通用容器类

来自分类Dev

CloudQueueClient类中“结果段”的含义

来自分类Dev

了解ERB中的代码段

来自分类Dev

了解Verilog中的代码段

来自分类Dev

Segmentation Fault中“代码”的含义是什么

来自分类Dev

这段代码中do-while的含义

来自分类Dev

在此scala代码中_的含义是什么?

来自分类Dev

NSURLErrorDomain中的代码的含义是什么?

来自分类Dev

以下代码中\ +的含义是什么

来自分类Dev

这段代码中$的含义是什么?

来自分类Dev

下面给出的这行代码在android中的含义......?

来自分类Dev

“ Graphics2D g2d =(Graphics2D)g;”是什么?意思是什么?在以下代码段中,此行的含义是什么?

来自分类Dev

Java中的通用代码生成

来自分类Dev

F#中的警告“此构造导致代码的通用性低于类型注释所指示的含义”是什么意思

来自分类Dev

在组织文件中包含代码段

来自分类Dev

删除Xcode 6中的默认代码段

来自分类Dev

在一段代码中暂停GC

来自分类Dev

了解Elm中的代码段(类型更新)

来自分类Dev

更改SBT中特定代码段的libraryDependencies?

来自分类Dev

如何关闭Atom中的代码段?

来自分类Dev

在此代码段中这是什么?

来自分类Dev

通过rmardown中的循环创建代码段

来自分类Dev

C中的共享内存代码段