自定义泛型

     除了在集合中我们可以使用已经定义好的泛型之外,我们自己还可以自定义泛型,如:自定义泛型类、自定义泛型方法。
一、自定义泛型类
具体的定义方法如下:
           public  class  GenericBySelf<T> {
         private  String  name  ;
         private  Integer  id  ;
         private  T  t  ;
        List<T>  list  =  new  ArrayList<>();
         public  void  SetT(T  t  ){
                this . t  =  t  ;
       }
         public  T getT(){
                return  t  ;
       }
}
      上面这个类就叫做自定义泛型类了,可以看到在类名的后面加了" <T> ",它就是我们自定义的泛型了,在类中我们可以用将T看作是一个类型,但具体是哪个类型,需要我们在实例化的时候去指明,如果我们定义了自定义泛型类,而在实例化的时候没有去使用,那么T类型就会被默认为Object类了
     当然自定义泛型类是可以被继承的,而子类在继承它的时候可以指明泛型也可以不指明,具体语法如下:
    //这是不指明泛型,实例化时需要去给去一个确定的类型
  class  son<T>  extends  GenericBySelf<T>{
         //....
  }
//这里指明了泛型的类型,意味着所有从父类继承过来的使用了泛型的地方全部为Integer类型
class  son  extends  GenericBySelf<Integer >{
         //....
}
二、自定义泛型方法
具体定义方法如下:
           public  class  GenericBySelf<T> {
         private  String  name  ;
         private  Integer  id  ;
         private  T  t  ;
        List<T>  list  =  new  ArrayList<>();
         public  void  SetT(T  t  ){
                this . t  =  t  ;
       }
         public  T getT(){
                return  t  ;
       }
         public  String getName() {
                return  name  ;
       }
         public  void  setName(String  name ) {
                this . name  =  name  ;
       }
       <E> E Get(E  e )
       {
          //......
                   return e;
       }
}

      自定义泛型方法在类中是可以单独定义的,可以看到自定义泛型方法与自定义泛型类所使用的泛型的字母是不一样的,也就是说类上定义的泛型对自定义泛型方法是没有影响的,当通过对象调用自定义泛型方法的时候,同样要指明数据类型的(必须使用基本数据类型的包装类或者是自己定义的类):
       GenericBySelf<Integer>  i  =  new  GenericBySelf<>();
       String  a  =  i .Get(  "MM" );  
以上就是自定义泛型的使用了,还需注意重要的两点:
     ①在static方法中不能使用泛型   因为static方法是在实例化一个对象之前就已经加载了的,如果使用了泛型,就像先出现的调用了后出现的,是不符合常理的;
     ②在try....catch中不能使用泛型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值