声明三个类
class Person<T, V> {
}
class Teacher {
}
class Student extends Person<Student, Teacher> {
}

分别打印数据观察区别
Class<? super Student> superclass = Student.class.getSuperclass();
Type genericSuperclass = Student.class.getGenericSuperclass();
System.out.println(superclass);
System.out.println(genericSuperclass);

输出结果:
class com.test.Person
com.test.Person<com.test.Student, com.test.Teacher>

总结
相同点:都返回当前对象所表示的类的超类。
不同点:getGenericSuperclass会包含该超类的泛型。

补充
getGenericSuperclass既然可以获取超类的泛型肯定能取出指定的泛型。
实现代码如下
Type[] params = ((ParameterizedType) genericSuperclass).getActualTypeArguments();
System.out.println((Class) params[1]);

输出
class com.test.Teacher
原文:https://blog.csdn.net/jingyangV587/article/details/81037054

具体使用例子,如在基础dao中操作hibernate查询时,需要知道当前操作的类的类型(可能是student,teacher,manager等),而具体实现类通常是实现其子类(如子类userDaoimpl),此时我们需要通过子类(即子类this)确定父类的泛型类型basedaoiml<A,B,C>。结合上面知识点,可理解下面红色部分代码实现的原因。

package com.itheima.bos.dao.base.impl;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import javax.annotation.Resource; import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.itheima.bos.dao.base.IBaseDao; /**
* 持久层通用实现
*/
public class BaseDaoImpl<T> extends HibernateDaoSupport implements IBaseDao<T> {
// 实体类型
private Class<T> entityClass; // 使用注解方式进行依赖注入
//@Resource
@Autowired
// @Qualifier(value="abc")
public void setMySessionFactory(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
} /**
* 在构造方法中动态获得操作的实体类型
*/
public BaseDaoImpl() {
// 获得父类(BaseDaoImpl<T>)类型
ParameterizedType genericSuperclass = (ParameterizedType) this
.getClass().getGenericSuperclass();
// 获得父类上的泛型数组
Type[] actualTypeArguments = genericSuperclass.getActualTypeArguments();
entityClass = (Class<T>) actualTypeArguments[0];
} public void save(T entity) {
this.getHibernateTemplate().save(entity);
} public void delete(T entity) {
this.getHibernateTemplate().delete(entity);
} public void update(T entity) {
this.getHibernateTemplate().update(entity);
} public T findById(Serializable id) {
return this.getHibernateTemplate().get(entityClass, id);
} public List<T> findAll() {// FROM User
String hql = "FROM " + entityClass.getSimpleName();
return this.getHibernateTemplate().find(hql);
} }

getSuperclass与getGenericSuperclass区别的更多相关文章

  1. java Class的 getSuperclass与getGenericSuperclass区别

    Class的getInterfaces与getGenericInterface区别 http://www.cnblogs.com/maokun/p/6773076.html 一.getSupercla ...

  2. Class的 getSuperclass与getGenericSuperclass区别

    一.getSuperclass   返回直接继承的父类(由于编译擦除,没有显示泛型参数)  Class<? super T> getSuperclass()           返回表示此 ...

  3. JAVA-反射-getGenericSuperclass()

    1 public class Person<T> { 2 3 } 4 5 import java.lang.reflect.ParameterizedType; 6 import java ...

  4. 有关java反射的几个小方法的作用和区别

    1.Class类中 getXXX()和getDeclaredXXX()的作用和区别: 前者获取某个类的所有公共(public)的字段(or方法or构造函数),包括父类.后者获取所有的字段(or方法or ...

  5. java中Class对象详解和类名.class, class.forName(), getClass()区别

    一直在想.class和.getClass()的区别,思索良久,有点思绪,然后有网上搜了搜,找到了如下的一篇文章,与大家分享. 原来为就是涉及到Java的反射----- Java反射学习 所谓反射,可以 ...

  6. 反射以及 getDeclaredMethods()和getMethods()区别

    内容转载自http://blog.csdn.net/ljphhj/article/details/12858767 package cn.lee.demo; import java.lang.refl ...

  7. .class和.getClass()的区别

    使用指定类初始化日志对象,在日志输出的时候,可以打印出日志信息所在类 如: getClass() 返回此 Object 的运行时类. //需要有com.lpx.test.class这个类 Logger ...

  8. java反射获得泛型参数getGenericSuperclass():获取到父类泛型的类型

    public class Person<T> { } import java.lang.reflect.ParameterizedType; import java.lang.reflec ...

  9. .getClass()和.class的区别

    一直在想.class和.getClass()的区别,思索良久,有点思绪,然后有网上搜了搜,找到了如下的一篇文章,与大家分享. 原来为就是涉及到java的反射----- Java反射学习 所谓反射,可以 ...

随机推荐

  1. Django模板渲染之自定义inclusion_tag详细使用

    inclusion_tag在使用的时候可以帮我们减少很多前端和后端重复的代码 逻辑图: inclusion_tag的作用是主页面以一定的语法给一个参数,调用某个函数,这个函数可以通过主页面给的参数做一 ...

  2. HBase的简单介绍,寻址过程,读写过程

    HBase是列族数据库,主要由,表,行键,列族,列标识,值,时间戳 组成,         表   其中HBase 主要底层存储依赖与hdfs,可以在HDFS中看到每个表名都作为一个独立的目录结构   ...

  3. [CF1146D]Frog Jumping_exgcd_堆优化dij

    Frog Jumping 题目链接:http://codeforces.com/contest/1146/problem/D 数据范围:略. 题解: 首先发现,如果$x\ge a +b$,那么所有的$ ...

  4. [转] Slf4j MDC机制

    MDC ( Mapped Diagnostic Contexts ),线程安全的诊断日志存放容器. 可用于存放线程的全局日志信息, 通过xml配置后可以打印在日志中,用于日志记录.定位.分析 相关:h ...

  5. Kubernetes---资源控制器之DaemonSet、Job和CronJob

    ⒈DaemonSet介绍,什么是DaemonSet DaemonSet 确保全部(或者一些)Node 上运行一个Pod的副本[注意主节点并不会参加调度].当有 Node 加入集群时,也会为他们新增一个 ...

  6. 关于container_of函数分析

    #include <stdio.h> #define offset_of(type,member) ((int)&(((type *)0)->member)) #define ...

  7. instanceof关键字 与 getClass()

    在equals()中使用getClass进行类型判断 我们在覆写equals()方法时,一般都是推荐使用getClass来进行类型判断,不是使用instanceof.我们都清楚instanceof的作 ...

  8. Angular 变更检测

    angular 的钩子函数有 content 和 view , Docheck 子控件中有属性变化的时候,父组件的 Docheck  content   view  这3个会依次执行,即使这个属性不在 ...

  9. JS基础_实参可以是任何值

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. python matplotlib 折线图

    1.绘制折线图,去上和右边框,显示中文 import numpy as np import matplotlib.pyplot as plt #plt.style.use('default') #pl ...