Java泛型01:什么是泛型?

简介: Java泛型01:什么是泛型?

@[toc]

一、泛型的概念

  • 所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类 型或者是某个方法的返回值及参数类型。这个类型参数将在使用时(例如, 继承或实现这个接口,用这个类型声明变量、创建对象时)确定(即传入实 际的类型参数,也称为类型实参)。
  • 从JDK1.5以后,Java引入了“参数化类型(Parameterized type)”的概念, 允许我们在创建集合时再指定集合元素的类型,正如:List,这表明 该List只能保存字符串类型的对象。
  • JDK1.5改写了集合框架中的全部接口和类,为这些接口、类增加了泛型支持, 从而可以在声明集合变量、创建集合对象时传入类型实参。

:o::那么为什么要有泛型呢,直接Object不是也可以存储数据吗?

  1. 解决元素存储的安全性问题,好比商品、药品标签,不会弄错。
  2. 解决获取数据元素时,需要类型强制转换的问题,好比不用每回拿商品、药 品都要辨别。

二、集合中没有泛型的时候

在这里插入图片描述

代码举例:

1.以ArrayList为例:

//在集合中使用泛型之前的情况
@Test
public void test1(){
    ArrayList list = new ArrayList();
    //存放学生的成绩
    list.add(12);
    list.add(13);
    list.add(14);
    list.add(15);

    list.add("金士曼");
    //问题一:类型不安全

    for (Object obj:list) {
        //问题二:强转时,可能出现异常:ClassCastException
        int score=(Integer) obj;//因为添加的是学生成绩所以需要int型
        System.out.println(score);

    }
}

三、集合中有泛型的时候

在这里插入图片描述

注意:使用泛型的时候,这个泛型是一个类型,不能是基本数据类型,可以是它的包装类

包装类:Java中什么是包装类?包装类与基本数据类型如何转换?

代码:

1.以ArrayList为例

@Test
    public void test2(){
        ArrayList<Integer> list = new ArrayList<Integer>();
        //此时泛型写的Integer,再去调用add方法的时候,如果放别的类型,编译就过不了了
        list.add(32);
        list.add(1232);
        list.add(2);
        list.add(323);
        //编译时进行类型检查
//        list.add("123");
        //方式一:增强for循环
        for(Integer score:list){
            //避免了强转操作
            int stuScore=score;
            System.out.println(stuScore);
        }
        //方式二:迭代器
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

2.以HashMap为例

@Test
public void test3(){
    HashMap<String , Integer> map = new HashMap<String, Integer>();
    map.put("Tom",98);
    map.put("Jack",89);
    map.put("Jerry",69);
    //一样的,放泛型以外的类型编译不会过

    //泛型的嵌套
    //这里Entry前面的Map点是因为他是内部类,如果要省可以导包(import java.util.Map.*;)之和就可以不写
    Set<Map.Entry<String , Integer>> entry = map.entrySet();

    //遍历
    Iterator<Map.Entry<String, Integer>> iterator = entry.iterator();
    while (iterator.hasNext()){
        Map.Entry<String, Integer> e = iterator.next();
        String key = e.getKey();
        Integer value = e.getValue();
        System.out.println(key+"---"+value);
    }


}

四、总结

  1. 集合接口或集合类接口在jdk5.0之和都修改为带泛型的结果
  2. 在实例化集合类时,可以指明具体的泛型的类型(注意:泛型是类型,不是变量名)
  3. 指明完以后,在集合类或集合接口时,内部结构使用到类的泛型的位置,都指定为实例化时泛型的类型,

    比如:add(E e)--->实例化后:add(Object e)

  4. 注意点:泛型的类型必须是一个类,不能是基本数据类型,需要用到基本数据类型的时候用包装类替换
  5. 如果实例化时没有指明泛型的类型,我们默认类型为java.long.Object
  6. Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生 ClassCastException异常。同时,代码更加简洁、健壮。
目录
相关文章
|
5月前
|
安全 Java 编译器
揭秘JAVA深渊:那些让你头大的最晦涩知识点,从泛型迷思到并发陷阱,你敢挑战吗?
【8月更文挑战第22天】Java中的难点常隐藏在其高级特性中,如泛型与类型擦除、并发编程中的内存可见性及指令重排,以及反射与动态代理等。这些特性虽强大却也晦涩,要求开发者深入理解JVM运作机制及计算机底层细节。例如,泛型在编译时检查类型以增强安全性,但在运行时因类型擦除而丢失类型信息,可能导致类型安全问题。并发编程中,内存可见性和指令重排对同步机制提出更高要求,不当处理会导致数据不一致。反射与动态代理虽提供运行时行为定制能力,但也增加了复杂度和性能开销。掌握这些知识需深厚的技术底蕴和实践经验。
105 2
|
3月前
|
Java API
[Java]泛型
本文详细介绍了Java泛型的相关概念和使用方法,包括类型判断、继承泛型类或实现泛型接口、泛型通配符、泛型方法、泛型上下边界、静态方法中使用泛型等内容。作者通过多个示例和测试代码,深入浅出地解释了泛型的原理和应用场景,帮助读者更好地理解和掌握Java泛型的使用技巧。文章还探讨了一些常见的疑惑和误区,如泛型擦除和基本数据类型数组的使用限制。最后,作者强调了泛型在实际开发中的重要性和应用价值。
63 0
[Java]泛型
|
3月前
|
存储 安全 Java
🌱Java零基础 - 泛型详解
【10月更文挑战第7天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
23 1
|
4月前
|
Java 编译器 容器
Java——包装类和泛型
包装类是Java中一种特殊类,用于将基本数据类型(如 `int`、`double`、`char` 等)封装成对象。这样做可以利用对象的特性和方法。Java 提供了八种基本数据类型的包装类:`Integer` (`int`)、`Double` (`double`)、`Byte` (`byte`)、`Short` (`short`)、`Long` (`long`)、`Float` (`float`)、`Character` (`char`) 和 `Boolean` (`boolean`)。包装类可以通过 `valueOf()` 方法或自动装箱/拆箱机制创建。
48 9
Java——包装类和泛型
|
3月前
|
Java 语音技术 容器
java数据结构泛型
java数据结构泛型
33 5
|
3月前
|
存储 Java 编译器
Java集合定义其泛型
Java集合定义其泛型
22 1
|
3月前
|
存储 Java 编译器
【用Java学习数据结构系列】初识泛型
【用Java学习数据结构系列】初识泛型
25 2
|
4月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
|
4月前
|
存储 安全 搜索推荐
Java中的泛型
【9月更文挑战第15天】在 Java 中,泛型是一种编译时类型检查机制,通过使用类型参数提升代码的安全性和重用性。其主要作用包括类型安全,避免运行时类型转换错误,以及代码重用,允许编写通用逻辑。泛型通过尖括号 `&lt;&gt;` 定义类型参数,并支持上界和下界限定,以及无界和有界通配符。使用泛型需注意类型擦除、无法创建泛型数组及基本数据类型的限制。泛型显著提高了代码的安全性和灵活性。
|
3月前
|
安全 Java 编译器
Java基础-泛型机制
Java基础-泛型机制
31 0