java的泛型的用法

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

import com.ldpoly.List;
泛型高级(通配符)
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
其中通配符“?”表示未知类型,可以是任何引用类型。
通配符一般会结合extend或super使用,来约束泛型的类型上界和类型下界。

类型参数(又称类型变量)用作占位符,指示在运行时为类分配类型。
根据需要,可能有一个或多个类型参数,并且可以用于整个类。
根据惯例,类型参数是单个大写字母,该字母用于指示所定义的参数类型。
下面列出每个用例的标准类型参数:

      E:元素
      K:键
      N:数字
      T:类型
      V:值 

     public class Task  {
         public static void main(String[] args) {
      泛型如果明确的写的时候,前后的类型一样
              ?任意类型,没有明确,那么就是Object以及任意的java的类 
       Collection<Object> c = new ArrayList<Object>();//正确的写法
       Collection<Object> c1 = new ArrayList<Cat>(); 错误的写法
        Collection<?> c1 = new  ArrayList<Animal>();
        Collection<?> c2 = new ArrayList<Object>();//正确的写法

         ?表示任意类型都可以//?extends E  向下限定,E及其子类
        Collection<? extends Animal> c3 = new ArrayList<Animal>();
        Collection<? extends Animal> c4 = new ArrayList<Animal>();

          ?super E    向上限定,E及其父类
        Collection<? super Animal> c5 = new ArrayList<Object>();
        Collection<? super Animal> c6 = new ArrayList<Animal>();
        总结:
              限定通配符总是包括自己
              上界类型通配符:add方法受限
              下界类型通配符:get方法受限
                如果你想从一个数据类型里获取数据,使用 ? extends 通配符
               如果你想把对象写入一个数据结构里,使用 ? super 通配符
              如果你既想存,又想取,那就别用通配符
              不能同时声明泛型通配符上界和下界

              extends 可用于的返回类型限定,不能用于参数类型限定。
                super 可用于参数类型限定,不能用于返回类型限定。


        }

    }

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

发布了37 篇原创文章 · 获赞 53 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_40861561/article/details/80035109
今日推荐