首页 > 编程语言 >Java基础 —— 泛型

Java基础 —— 泛型

时间:2024-12-08 20:32:20浏览次数:8  
标签:Java name age 基础 Person 泛型 arrayList public String

泛型

 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。

理解

 为了可以进一步理解泛型,我们先来看一个问题

需求:
 编写一个程序,在ArrayList中添加三个对象,类中要有name、age属性,输出对象的name、age属性

  • 首先,我们先用传统方法进行编写
package com.sxny;

import java.util.ArrayList;

public class text {
    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();
        arrayList.add(new Person("王五",55));
        arrayList.add(new Person("李四",12));
        arrayList.add(new Person("王五",8));
        arrayList.add(new Animal("奶盖",2));
        for (Object o:arrayList){ //增强for循环
            Person person = (Person)o;
            System.out.println(person);
        }
    }
}
class Person{
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
class Animal{
    private String name;
    private int age;
    public Animal(String name,int age){
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Animal{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

​​ 从上图我们可以看到,用传统方法,会出现ClassCastException异常, 其原因主要是传统方法中,需要进行类型的转换。Person在进入Arraylist中时会转换成Object类型,在取出时又会转回Person类型。

  • 针对以上问题,现在我们利用泛型来解决
package com.sxny;

import java.util.ArrayList;

public class text {
    public static void main(String[] args) {
        ArrayList<Person> arrayList = new ArrayList<Person>();
        arrayList.add(new Person("王五",55));
        arrayList.add(new Person("李四",12));
        arrayList.add(new Person("王五",8));
        // arrayList.add(new Animal("奶盖",2));
        for (Object o:arrayList){ //增强for循环
            Person person = (Person)o;
            System.out.println(person);
        }
    }
}
class Person{
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
class Animal{
    private String name;
    private int age;
    public Animal(String name,int age){
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Animal{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

 在创建Arraylist时限制了添加元素的类型, Arraylist arraylist = new Arraylist()若发现类型不符合,则会报错,并且在遍历时无需类型的转换,因此,解决了ClassCastException异常的问题。

使用泛型的好处

  • 编译时,检查添加的元素,增加了安全性。
  • 无需数据类型的转换,提高了效率。
  • 不再提示警告。

类通配符

 通常类通配符使用 ?代替具体的类型参数。例如,List<?>逻辑上是List<Integer>List<String>等所有List<类型>的父类。

标签:Java,name,age,基础,Person,泛型,arrayList,public,String
From: https://www.cnblogs.com/codyxz/p/18593642

相关文章

  • 【Liunx篇】基础开发工具 - vim
    文章目录一.vim的基本概念1.正常/命令模式2.插入模式3.底行模式/末行模式4.视图模式5.替换模式二.vim的基本操作1.进入vim:2.退出vim:三.vim正常模式命令集1.光标定位:2.复制/粘贴3.撤销4.剪切/删除5.更改四.vim底行模式命令集1.保存/退出2.调出行号3.搜索字符4.命令......
  • Java 进阶指南
    Java作为一种广泛应用的编程语言,在掌握了基础语法和面向对象概念后,进阶学习将帮助开发者构建更强大、高效和可维护的应用程序。一、多线程编程多线程允许程序在同一时间内执行多个任务,提高程序的运行效率和响应性。在Java中,通过Thread类或实现Runnable接口来创建线程......
  • Java毕设项目案例实战II基于Java+Spring Boot+MySQL的玩具租赁系统设计与实现(开发文档
    目录一、前言二、技术介绍三、系统实现四、核心代码五、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。一、前言在环保意识日益增强的今天,玩具租赁作为一种绿色、经济的消费方式,逐渐受到家长和孩......
  • 2024-2025-1 20241409《计算机基础与程序设计》第二周学习总结
    这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里[2024-2025-1计算机基础与程序设计第二周作业](https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/homework/13266)这个作业的目标数字化信息安全*自学教材:计算机科学概论(第七版)第1......
  • 2024-2025-1 20241327 《计算机基础与程序设计》第十一周学习总结
    作业信息|2024-2025-1-计算机基础与程序设计)||--|-|2024-2025-1计算机基础与程序设计第十一周作业)||快速浏览一遍教材计算机科学概论(第七版),课本每章提出至少一个自己不懂的或最想解决的问题并在期末回答这些问题|作业正文|https://www.cnblogs.com/shr060414/p/18440575|......
  • 2024-2025-1 20241409《计算机基础与程序设计》第三周学习总结
    这个作业属于哪个课程 <班级的链接>这个作业要求在哪里 <作业要求的链接>这个作业的目标 自学《计算机科学概论》第2、3章作业正文 https://www.cnblogs.com/smpj/p/18593768教材学习内容总结《计算机科学概论》第二章主要介绍了数字、位置记数法、十进制数与其他数制的数......
  • 2024-2025-1 20241416 《计算机基础与程序设计》第十一周学习总结
    这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK11这个作业的目标计算机网络网络拓扑云计算网络安全WebHTML,CSS,JavascriptXML作业正文https://www.cnblogs.com/rockytyh/p/1......
  • 如2024-2025-1 20241320 《计算机基础与程序设计》11周学习总结
    2024-2025-120241320《计算机基础与程序设计》第11周学习总结作业信息|这个作业属于哪个课程|https://edu.cnblogs.com/campus/besti|这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK11|这个作业的目标|计算机网络网络拓扑云计算网络安全Web......
  • java + mysql + 38_在线网络教学平台的设计与实现 +(完整源码 + 说明文档 + 演示视频)
     ......
  • springboot毕设基于java的宠物店管理系统源码+论文+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着人们生活水平的提高,宠物在人类生活中扮演着越来越重要的角色,宠物行业得到了飞速的发展 3。然而,在宠物服务领域,传统的人工管理方式存在诸多......