当前位置:   article > 正文

Java —— 初始泛型_java 泛型初始化

java 泛型初始化

Java —— 初始泛型

在这里插入图片描述

每博一文案

人生就像一趟永不停歇的列车,在岁月长河中不断穿行。
小时候总希望自己快点长大,觉得成年人的世界会很幸福,可当我们长大
后,才发现没有什么是一成不变的。不飞,人也飞,我们走着走着,明白了
没有谁会停留在原地,一直如初,也许,一不小心就会弄丢了对方。
就像席慕容在小红门中写道,这个世界上有很多人,你以为明天一定可以见面,
所以你暂时放下手,但求那么一次,你一转身,有些人就此和你有绝了。
人生路上有些人,注定只能陪我们一程,不管我们是否愿意,转身的刹那,很有可能
就是后悔无期。
                                       ————————     一禅心灵庙语

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10


泛型

数组有一个非常经典的特点,即数组声明后只能存放同一种类型的数据。集合存放元素多元化。可以存放不同的类型的数据,因为集合底层每个元素都会向上转型Odject 类型,Odject 类是所有类的父类,任意的类型都可以存入到集合中,集合在设计之初并不确定实际要存储什么类型的对象,所以底层元素了类型设计为Odject 类,集合中可以存入多种数据类型的元素,只有当需要存储相同类型的个体时才会选择使用集合,所以在JDK1.5 以后,使用泛型来解决限制。通过使用泛型,去除了元素类型存入的不确定性,在创建集合之初就约定了这个集合可以存放类型。

泛型类的定义

  • 尖括号< > 是泛型的标志,<E> 是类型变量(Type Variable), 变量名一般要大写,E 在定义时是形参,代表的意思是 ,最终传入的类型
  • 泛型的分类
    • 泛型类
    • 泛型方法

泛型

<T> :只是一个占位符,表示当前类是一个泛型类

  1. 泛型可以自动进行类型的检查,
  2. 泛型可以进行类型的转换

泛型的坑

  1. new 泛型类型的数组。 this.elem = new new[10]
  2. 基本数据类型不可以作为泛型的参数使用,需要使用对应的包装类 MyArrayList myArrayList = new MyArrayList<>();
  3. 泛型类型参数,不参与类型的组成

package Blog1;
// 泛型

import java.util.Arrays;

// 创建一个泛型类
class MyArrayList<T>{
    public T[] elem;  // 创建一个泛型数组
    public int usedSize;

    public MyArrayList() {    // 构造方法
//        this.elem = new new[10];  // 泛型不可实例化
        this.elem = (T[])new Object[10];  // Object父类数组 通过强转置为 泛型数组

    }

    public void add(T val) {  // 泛型参数
        this.elem[this.usedSize] = val;
        this.usedSize++;
    }

    public T[] getElem() {
        return elem;
    }
    public T getVal(int n) {  // 根据下标返回对应数组的下标值
        return elem[n];
    }
}

public class Blog16 {
    public static void main(String[] args) {
//        MyArrayList<int> myArrayList = new MyArrayList<>();
//        基本数据类型不可以作为泛型的参数使用,需要使用对应的包装类才行
        MyArrayList<Integer> myArrayList = new MyArrayList<Integer>();  // 等号右边的参数可以省略不写的
        myArrayList.add(1);
//        myArrayList.add("hello");   泛型会自动检查类型的一致性
        myArrayList.add(2);
        myArrayList.add(3);
        System.out.println(myArrayList.getVal(1));  // 取对应下标的值
        System.out.println(Arrays.toString(myArrayList.getElem()));  // 打印泛型数组
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

在这里插入图片描述


通过以上代码,我们可以看到泛型类的一个使用方法,只需要在所存类型后边跟上 尖括号<> ,并且尖括号内是真正的类型,即 T 可以看作是最后的类型。

面试问题

泛型到底是怎么编译的

面试官想知道的就是4个字 擦除机制

泛型只是编译时期的一种机制 ,异常也是 —— 擦除机制

擦除机制 : 在运行的时候,不存在泛型的说法,所有的处理均在编译阶段已经处理。擦除机制,在编译的时候,泛型类型被擦除为了 Object 使用,注意 不是替换,而是擦除


泛型总结

  1. 泛型是为了解决某些容器,算法等代码的通用性而引入,并且能在编译间做类型检查
  2. 泛型利用的是Object 是所有类的祖先类,并且父类的引用可以指向子类对象的特定而工作
  3. 泛型是一种编译期间的机制,即MyArrayList<Person>、MyArrayList<String> 在运行期间是一个类型
  4. 泛型是 Java中的一种合法语法标志就是 尖括号< >

最后:

限于自身水平,其中存在的错误,希望大家给予指教,韩信点兵——多多益善,谢谢大家,后会有期,江湖再见!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/716200
推荐阅读
相关标签
  

闽ICP备14008679号