Java泛型 T.class的获取

public interface BaseDao<T> {
    T get(String id);
}  
 1 import java.lang.reflect.ParameterizedType;
 2 import java.lang.reflect.Type;
 3
 4 public abstract class HibernateBaseDao<T> implements BaseDao<T> {
 5     private Class<T> entityClass;
 6
 7     /**
 8      * 这个通常也是hibernate的取得子类class的方法
 9      *
10      * @author "yangk"
11      * @date 2010-4-11 下午01:51:28
12      */
13     public HibernateBaseDao() {
14         Type genType = getClass().getGenericSuperclass();
15         Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
16         entityClass = (Class) params[0];
17     }
18
19     @Override
20     public T get(String id) {
21         try {
22             return entityClass.newInstance();
23         } catch (InstantiationException e) {
24             // TODO Auto-generated catch block
25             e.printStackTrace();
26         } catch (IllegalAccessException e) {
27             // TODO Auto-generated catch block
28             e.printStackTrace();
29         }
30         return null;
31     }
32
33 }  

14-16行是重点,entityClass即为Class,也就是T.class

本文参考:http://blog.csdn.net/ykdsg/article/details/5472591

Java泛型 T.class的获取,布布扣,bubuko.com

时间: 2024-08-05 18:52:37

Java泛型 T.class的获取的相关文章

获取java泛型参数类型

1.Type和Class的区别 简单来说,Class实现了Type接口. Type源码定义: package java.lang.reflect; /**  * Type is the common superinterface for all types in the Java  * programming language. These include raw types, parameterized types,  * array types, type variables and pri

ParameterizedType获取java泛型参数类型

https://blog.csdn.net/qq_18242391/article/details/54251947 前言 这两天在看以前写的ssh项目时,遇到一个问题就是封装的BaseDaoImpl抽象类,构造方法里面是这样写的. Class<T> clazz; public BaseDaoImpl() { ParameterizedType pt = (ParameterizedType)getClass().getGenericSuperclass(); clazz = (Class&l

Java泛型的协变

在上篇<Java泛型的基本使用>这篇文章中遗留下面问题,即将子类型也能加入到父类型的泛型中.要实现这样的功能必须借助于协变. 实验准备 如今在上篇文章展示的Decorator类型的基础上,添加一些代码,如代码清单1所看到的. 代码清单1 /** * * 描 述:Exp2使用br/> * 作 者:jiaan.gja<br/> * 历 史: (版本号) 作者 时间 凝视 <br/> * @param itemList */ public void doDecorate

Java泛型简明教程

Java泛型简明教程 博客分类: Java综合 JavaApple数据结构CC++ Java泛型简明教程 本文是从 Java Generics Quick Tutorial 这篇文章翻译而来. 泛型是Java SE 5.0中引入的一项特征,自从这项语言特征出现多年来,我相信,几乎所有的Java程序员不仅听说过,而且使用过它.关于Java泛型的教程,免费的,不免费的,有很多.我遇到的最好的教材有: The Java Tutorial Java Generics and Collections ,

Java泛型-- 通配符

转自:http://blog.csdn.net/flfna/article/details/6576394 ———————————————————————————————————————————— 通配符 在本文的前面的部分里已经说过了泛型类型的子类型的不相关性.但有些时候,我们希望能够像使用普通类型那样使用泛型类型: ◆ 向上造型一个泛型对象的引用 ◆ 向下造型一个泛型对象的引用 向上造型一个泛型对象的引用 例如,假设我们有很多箱子,每个箱子里都装有不同的水果,我们需要找到一种方法能够通用的处

java泛型(二)、泛型的内部原理:类型擦除以及类型擦除带来的问题

java泛型(二).泛型的内部原理:类型擦除以及类型擦除带来的问题 参考:java核心技术 一.Java泛型的实现方法:类型擦除 前面已经说了,Java的泛型是伪泛型.为什么说Java的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉.正确理解泛型概念的首要前提是理解类型擦出(type erasure). Java中的泛型基本上都是在编译器这个层次来实现的.在生成的Java字节码中是不包含泛型中的类型信息的.使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉.这个过程就称为类型

Java泛型学习笔记--Java泛型和C#泛型比较学习(一)

总结Java的泛型前,先简单的介绍下C#的泛型,通过对比,比较学习Java泛型的目的和设计意图.C#泛型是C#语言2.0和通用语言运行时(CLR)同时支持的一个特性(这一点是导致C#泛型和Java泛型区别的最大原因,后面会介绍).C#泛型在.NET CLR支持为.NET框架引入参数化变量支持.C#泛型更类似C++模板,可以理解,C#泛型实际上可以理解为类的模板类.我们通过代码实例来看C# 2.0泛型解决的问题,首先,我们通过一个没有泛型的迭代器的代码示例说起,代码实现如下: interface

java泛型擦除的神秘之处,边界处的动作,擦除的补偿

java泛型擦除的神秘之处 package org.rui.generics.erasure; public class HasF { public void f(){ System.out.println("hasf.f"); } } package org.rui.generics.erasure; /** * 边界 <T extneds Hasf>声明T必须具有类型HasF或者从Hasf导出的类型. * 如果情况确实如此,那么就可以安全地在obj上调用f()了 * T

Java泛型详解(转)

文章转自  importNew:Java 泛型详解 引言 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用.本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除. 泛型基础 泛型类 我们首先定义一个简单的Box类: public class Box { private String object; public void set(String object) { this.object = object; } public Stri