关于泛型这个令人头大的东西

System.out.println(" 《JAVA编程的逻辑》这本书里,泛型这一章占了大概20页左右,某一天心比天高地硬是花了整整一天看完了这一章,脑子里胡球燃。行,那老子就 再看一遍。整理下知识点。");
 
泛型:泛型就是类型参数化,处理的数据类型不是固定的,而是可以作为参数传入

1.JAVA泛型内部原理:JAVA有JAVA编译器和JAVA虚拟机,编译器将JAVA源代码转换为.class文件,虚拟机加载并运行.class文件。对于泛型类,JAVA编译器会将泛型代码转换为普通的非泛型代码,将类型参数 擦除,替换为Object,插入必要的强制类型转换。

2. 定义部分
   泛型类、泛型接口 类名、接口名后加类型参数
   z.B.  public class GenericDemo<T>{}
  泛型方法 返回值标志前加类型参数  ,参数前加类型参数。 //与泛型类不同,调用方法时并不需要特意指定类型参数的实际类型
    z.B. public <T> int calculate(T age){} 

3.使用与传递类型参数部分
  类名<数据类型>  引用变量名=new 类名<数据类型>(构造方法);
                                                                            //数据类型指的就是传递的实际类型参数。具体的类型还可与是一个泛型类。

   一个泛型对象的getClass方法的返回值与原始类型对象也是相同的

System.out.println(" 当然 类型参数也可以不止一个");
  z.B. Pair<String,Integer> p=new Pair<String,Integer>("仙草奶冻",8);

         可以简化为: Pair<String,Integer> p=new Pair<>("仙草奶冻",8);
  泛型接口实现时 
  z.B. public class Demo implements Comparable<Integer>
4.关于参数类型的限定

(1)在泛型类中,参数类型可用extends来限定上界  z.B. public class Demo <T extends Number>
(2)在泛型方法中,可在限定泛型方法时,规定该方法必须实现某接口
              z.B. public static < T extends Comparable<T>> T max(T a,T b){}  //递归类型限制
(3)在泛型方法中,可设置泛型参数上界为其他类型的上界


       System.out.println("虽然Integer是Number的子类,但是DynamicArray<Integer>并不是 DynamicArray<Number>的子类,DynamicArray<Integer>的对象也不能赋值给 DynamicArray<Number>的对象");
    除非!!! z.B. public < T extends E> void addall(DynamicArray<T> c)

5.通配符  只可读 不可写
  比较一下:<T extends E>用于定义类型参数(用于声明)
                   <? extends E>用于实例化类型参数(?可以是E或者E的子类型)

6.超类型通配符  形式:<? super E> E的某个父类型

 通常用于灵活写入或比较,不能被类型参数形式替代。
 而<?>  <? extends E>用于灵活读取,可以用类型参数的形式替代

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值