Java的泛型反射

If the superclass is a parameterized type, the {@code Type}
     * object returned must accurately reflect the actual type
     * parameters used in the source code. T

上文档DOC,如果父类是一个参数化类型,那么Type返回的是参数类型的真实类型

package entity;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * Created by Administrator on 2016/11/27 0027.
 */
public class BaseDaoImpl<T> implements BaseDao<T> {

    public BaseDaoImpl(){
        Type type = getClass().getGenericSuperclass();
        Type[] params = ((ParameterizedType)type).getActualTypeArguments();
        System.out.println((Class<T>)params[0]);
    }

    public T findByid(int id) {
        return null;
    }
}
package entity;

/**
 * Created by Administrator on 2016/11/27 0027.
 */
public class UserDaoImpl extends BaseDaoImpl<User> {
}
package entity;

/**
 * Created by Administrator on 2016/11/27 0027.
 */
public interface BaseDao<T> {
   public T findByid(int id);
}
package entity;

import org.junit.Test;

/**
 * Created by Administrator on 2016/11/27 0027.
 */
public class GenericTest {
    @Test
    public void testGeneric(){
        UserDaoImpl baseDao = new UserDaoImpl();
        //BaseDaoImpl<User> baseDao1 = new BaseDaoImpl<User>();
    }
}

记录总结,只有继承的父类为参数化类型,此时反射的

ParameterizedType 才能拿到参数类型
时间: 2024-10-29 19:06:03

Java的泛型反射的相关文章

java中利用反射机制绕开编译器对泛型的类型限制

首先看下面这个例子 public static void main(String[] args) { ArrayList<Integer> al1 = new ArrayList<Integer>(); al1.add(1); ArrayList<String> al2 = new ArrayList<String>(); al2.add("hello"); //int型链表和string型链表,结果为true System.out.pr

java的泛型与反射机制

什么是泛型? 泛型,即"参数化类型".顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参). 为什么要使用泛型? 先看如下代码: public class GenericTest { public static void main(String[] args) { List list = new ArrayList(); list.add("qqyumidi"

Java核心 --- 泛型

CoreJava 泛型 java泛型的出现避免了强制类型转换,便于代码更好的被阅读 本文的写作参照了张孝祥的泛型介绍:http://www.itcast.cn/news/dbfd20f1/f4b1/412d/9b40/c1a81b8bf1da.shtml 更多疑问请参考:http://www.vaikan.com/java-generics-quick-tutorial/ 1.可以接收类型参数的类型在接受类型参数后变为泛型,但是,虽然是不同的泛型但是还是相同的类型 package com.yuk

重踏学习Java路上_Day27(反射,模式设计,jdk新特性)

1:反射(理解) (1)类的加载及类加载器 (2)反射: 通过字节码文件对象,去使用成员变量,构造方法,成员方法 (3)反射的使用 A:通过反射获取构造方法并使用 B:通过反射获取成员变量并使用 C:通过反射获取成员方法并使用 (4)反射案例 A:通过反射运行配置文件的内容 B:通过反射越过泛型检查 C:通过反射给任意的一个对象的任意的属性赋值为指定的值 (5)动态代理 2:设计模式 (1)装饰设计模式 BufferedReader br = new BufferedReader(new Inp

java高级之反射

--- android培训.java培训.期待与您交流! ---- java高级之反射 一 反射(类的加载概述和加载时机) A:类的加载概述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载 就是指将class文件读入内存,并为之创建一个Class对象.任何类被使用时系统都会建立一个Class对象. 连接 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 解析 将类的二进制数据

C++ Java C#泛型

泛型概述C#中的泛型C#泛型和java泛型的比较C#泛型和C++模板的比较C#泛型中的约束 泛型概述 Bruce Eckel :您能对泛型做一个快速的介绍么? Anders Hejlsberg : 泛型其实就是能够向你的类型中加入类型参数的一种能力,也称作参数化的类型或参数多态性.最著名的例子就是List集合类.一个List是一个易于增长的 数组.它有一个排序方法,你可以为 它做索引,等等.现在,如果没有参数化的类型,那么不论使用数组还是使用List都不是很好.如果你使用数组,你能获得强类型,因

Java 中的反射机制

一.什么是Java中的反射: Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性和方法.Java 的这一能力在实际应用中用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性.例如,Pascal.C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息.Reflection 是 Java 被视为动态(或准动态)语言的关键,允许程序于执行期 Reflection APIs 取得任何已知名称之

java 动态性之反射机制 详解 案例

1.反射机制 2.动态编译 3.动态执行javassript代码 4.动态字节码操作 动态语言 程序运行时,可以改变程序结构或变量类型.典型的语言: 1):Python.ruby.javascript等. 2):如下javascript代码: funtion test(){ var s ="var a=3;var b=5;alert(a+b);"; eval(s); } 3):C,C++,JAVA不是动态语言,JAVA可以称之为"准动态语言".但是JAVA有一定的动

Java笔记:反射

一.基础知识 Class是泛型超类,封装了类或接口运行时的状态.Class是Java中的反射中心,可以在运行时查找类的信息. class Solution { public static void main(String[] args) throws ClassNotFoundException { Class c = String.class;//通过类文字获取 c = "Hello World".getClass();//通过getClass获取 c = Class.forName