Java泛型与反射

泛型:
* 泛型是java中的类型
* java.lang.Type可以代表java中的所有的类型
* 泛型是被参数化的类型
* 类型 —>Class
* 被参数化–>Class类型可以传递参数
* 泛型的存在的意义
* 多态
实际的类型和需要的类型有可能不匹配
如果不匹配,则会报ClassCastException错误
* 泛型可以在编译的时候告诉Class类型,传递的参数
是什么类型,如果类型错误,则在编译的时候就会
报错
* 泛型所表现的形式
* ArrayList
* ArrayList是Class类型
* ArrayList带一个参数为T,T是一个形参
* 在创建ArrayList对象的时候,就可以决定实参
* 表现:ArrayList a = new ArrayList();
这样实参为Person,这就意味着a集合中只能存放person
* public interface PersonDao{

       }
       public class BaseDaoImpl<T>{

       }
       public class PersonDaoImpl extends BaseDaoImpl<Person> implements PersonDao<Person>{

       }
    *  public class Person<? extends Collection>传递的参数只能是集合的子类
*  泛型的用法
    public class Person<T>{

    }
    该参数T可以用在属性和方法(可以用在方法的参数和返回值)上

   ![这里写图片描述](https://img-blog.csdn.net/20161106205458889)

这里写图片描述

package cn.itcast.oa0909.dao.base;

import java.io.Serializable;
import java.util.Collection;

public interface BaseDao<T>{
    public Collection<T> getAllEntry();
    public T getEntryById(Serializable id);
    public void saveEntry(T t);
    public void updateEntry(T t);
    public void deleteEntry(Serializable id);
}
private Class classt;
    /**
     * 1、在父类中要执行一段代码,这个代码的执行时间为子类创建对象的时候,这段代码已经执行完了,根据这个需求,有两种方案供选择
     *      *  利用static语句块
     *      *  利用父类的构造函数
     * 2、分析:
     *      因为得到ParameterizedType需要用到this关键字,而this关键字不能出现在static语句块中
     *    所以只能选择父类的构造器
     */
    public BaseDaoImpl(){
        /**
         * ParameterizedType就是泛型
         */
ParameterizedType type = (ParameterizedType)this.getClass().getGenericSuperclass();//getClass当前类.获取泛型父类,就是调它那个类
this.classt = (Class)type.getActualTypeArguments()[0];//<T>//获取实际参数类型,通过数组下标曲拿,因为有可能传递多个
System.out.println(type.getRawType());
    }
关于泛型,这段经典代码的解析:
首先把它写在构造函数中,只要某个类去调用这个类,自然就去调用构造方法。构造方法其实也就是在创建子类之前,初始化。
因为static静态代码块是先加载的,所以不能用this,因为对象都还没有创建出来

public interface BaseDao<T>
public class BaseDaoImpl<T> implements BaseDao<T>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunywz

~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值