浅谈----泛型

泛型

希望编译时,及时发现类型不匹配的问题

  1. 必须明确知道参数类型中的引用数据类的具体类型Object(类型)
  2. 向下转型,需要通过instanceof 判断

结论:向下转型是不安全的,会带来隐患

Eg:

泛型类:

  1. x,y
    2.整数,浮点型,字符串
    3.泛型类,,指定参数类型
    4.使用泛型类的时候,决定属性的具体类型
     */

类型参数
public class Test1<T> {
    private T x;
    private T y;

泛型类和泛型方法(没有关系)

  1. 泛型类和泛型方法参数类型的字母最好区分开
  2. 泛型类和泛型方法可以共存,二者各自独立

泛型方法:(比方法重载要厉害)

       参数化类型

  1. public <T> void print(T t)

           System.out.println (t);

 

  • 泛型通配符
  1. ?表示可以是任意类型,但是要求,不能对类的对象进行修改
  2. <?extends 泛型类型>泛型类型的上限(用的多)

上限用在声明,但是要求,不能对类的对象进行修改

(String类没有子类,因为它被final修饰)

  1. <? super 泛型类型>泛型类型的下限

用在方法参数上,可以修改

泛型接口

1.泛型接口的定义和泛型类区别不大

2.泛型接口的实现类:有可能是泛型类,也有可能不是泛型类(接口处指定具体类型)

泛型类型擦除

1.泛型类和普通类在jvm中没有什么不同

Unicode 汉字编码范围\u4E00-\u9FA5

  1. 编译时的功能扩展,运行时擦除泛型信息
  2. 如果泛型类型无上限类型,泛型擦除之后的类型是Object

如果泛型类型有上限类型,泛型擦除之后的类型是上限类型

Test1<Integer> test1 = new Test1();
Test1<String> test2=new Test1();
System.out.println (test1.getClass ()==test2.getClass ());
System.out.println ("test1 Class:"+test1.getClass ());
System.out.println ("test2 Class:"+test2.getClass ());

输出结果:

   true

true

猜你喜欢

转载自blog.csdn.net/qq_41832361/article/details/89331263