泛型的相关内容

news2024/11/17 22:32:40

首先我们来了解一下什么是泛型,泛型的作用又是什么。

泛型的形式是

ArrayList<Object> objects = new ArrayList<>();

这里的<Object>这个就是泛型,添加泛型的作用又是什么呢,它可以限制添加对象的类型,比如AarryLsit<Object>则ArrayList只能存放Object类型的元素,这个好处是什么,当我们设置泛型时可以避免一些传入对象类型不对的情况,接下来我们示范一些实际案例:

要求ArraryList当中的元素必须是Person

首先我们来看一下没有有定义泛型的情况:

import java.util.ArrayList;

public class Array {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();
        arrayList.add(new Preson("jack", 18));
        arrayList.add(new Preson("monkey", 18));
        arrayList.add(new Cat("mack", 23));
        System.out.println(arrayList);
    }
}

class Preson{
    public String name;
    public int age;

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

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

class Cat{
    public String name;
    public int age;

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

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

我们发现添加Cat类型的对象也是可以添加上去的,这里就不符合我们添加对象的限制,当我们

添加一下泛型时看一下是否能限制不符合要求对象的加入。

这里我们发现当我们添加泛型之后我们发现当我们想添加Cat类型的对象的时候我们发现该语句报错了,这就是泛型的作用。

泛型的作用也不止于此,它还可以应用在方法当中,即泛型方法:

class Person<E> {
        
        public Person(E s) {//E 也可以是参数类型
        this.s = s;
        }
}
这里就是我们的泛型类和泛型构造器,E是通过你传入的对象类型自动进行替换如果传入的是String类型则这个E就是String类型,依次类推;
public E f() {// 返回类型使用 E
        return s;
}
public class Array {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        Dog1<String> wc = new Dog1<>("旺财");
        System.out.println(wc.f());
    }
}
class Dog1<E>{
    public E s;

    public Dog1(E s) {
        this.s = s;
    }

    public E f(){
        return s;
    }
}
这里我们发现E类型就变成了String类型。
当我们没有定义泛型时默认E为Object类型,而且泛型最好不要与静态属性定义在一块,因为二者是冲突的,没有确定E类型的时候是无法进行初始化的,泛型的定义不是一定要用E来表示也可以是其他的比如T,S,P等等,泛型的定义必须是引用类型,基本数据类型无法定义泛型。
泛型可以定义多个比如:
class Tiger<S, T, M>{
        String name;
        S s;
        T t;
        M m;
泛型的使用范围很广,可以定义属性,返回类型,数组(泛型定义的数组,不能进行初始化,因为类型不确定,所以无法开辟空间),接口等等,泛型一旦被定义一个固定的引用类型,即可传入本类或者其子类的类型。
接下来我们看一个泛型的实例演示:
题目要求:
代码展示:
import java.util.ArrayList;
import java.util.Comparator;

public class inclass {
    public static void main(String[] args) {
        @SuppressWarnings({"all"})
        ArrayList<Employees> employees = new ArrayList<>();
        employees.add(new Employees("zzh", 50000, new MyData(2003, 9, 21)));
        employees.add(new Employees("hsx", 30000, new MyData(2002, 10, 11)));
        employees.add(new Employees("ksx", 30000, new MyData(2002, 10, 11)));
        System.out.println(employees);
        System.out.println("=====排序后的结果");
        employees.sort(new Comparator<Employees>() {
            @SuppressWarnings({"all"})
            @Override
            public int compare(Employees emp1, Employees emp2) {
                if (!(emp1 instanceof Employees && emp2 instanceof Employees)) {
                    return 0;
                }
                //是否为Employees类或者子类如果不是则返回0退出比较
                int i = emp1.getName().compareTo(emp2.getName());
                if (i != 0){
                    return i;
                }
                //比较姓名的字符大小
                int year = emp1.getMydata().getYear() - emp2.getMydata().getYear();
                if (year != 0){
                    return year;
                }
                //在姓名相同的情况下比较年份大小
                int monuth = emp1.getMydata().getMonuth() - emp2.getMydata().getMonuth();
                if (monuth != 0){
                    return monuth;
                }
                //在前两者都相同的情况下比较月份大小
                return emp1.getMydata().getDay() - emp2.getMydata().getDay();
                //前三者都相同的话再进行天数的判断
            }
        });
        System.out.println(employees);

    }
}


class Employees{
    private String name;
    private int dale;
    private MyData mydata;

    public Employees(String name, int dale, MyData mydata) {
        this.name = name;
        this.dale = dale;
        this.mydata = mydata;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getDale() {
        return dale;
    }

    public void setDale(int dale) {
        this.dale = dale;
    }

    public MyData getMydata() {
        return mydata;
    }

    public void setMydata(MyData mydata) {
        this.mydata = mydata;
    }

    @Override
    public String toString() {
        return "Employees{" +
                "name='" + name + '\'' +
                ", dale=" + dale +
                ", mydata=" + mydata +
                '}';
    }
}

class MyData{
    private int year;
    private int monuth;
    private int day;

    public MyData(int year, int monuth, int day) {
        this.day = day;
        this.monuth = monuth;
        this.year = year;
    }

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }

    public int getMonuth() {
        return monuth;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public void setMonuth(int monuth) {
        this.monuth = monuth;
    }

    @Override
    public String toString() {
        return "MyData{" +
                "year=" + year +
                ", monuth=" + monuth +
                ", day=" + day +
                '}';
    }
}

泛型的相关内容我们就聊到这里。

      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1313870.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C# WPF上位机开发(键盘绘图控制)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在软件开发中&#xff0c;如果存在canvas图像的话&#xff0c;一般有几种控制方法。一种是鼠标控制&#xff1b;一种是键盘控制&#xff1b;还有一…

【动手学深度学习】(十四)数据增广+微调

文章目录 一、数据增强1.理论知识2.代码 二、微调1.理论知识 一、数据增强 1.理论知识 增加一个已有数据集&#xff0c;使得有更多的多样性 在语言里面加入各种不同的背景噪音改变图片的颜色和形状 使用增强数据训练 翻转 左右翻转上下翻转 不总是可行 切割 从图片中切…

VUE-脚手架搭建

文章目录 一、概述二、前提准备1. 安装 node-js2. npm 镜像设置3. 安装 vs-code 三、脚手架搭建1. Vue-2 搭建1. Vue-3 搭建 一、概述 官网&#xff1a;http://cn.vuejs.org/ vue 有两个大版本&#xff0c;分别是 vue-2 和 vue-3&#xff0c;目前新项目的话用 vue-3 的会比较多…

python每日学11:xpath的使用与调试

背景&#xff1a;最近在使用selenium 模拟浏览器作一些常规操作&#xff0c;在使用selenium的过程中接触到的一种定位方法&#xff0c;叫xpath, 这里说一下使用心得。 首先&#xff0c;我觉得如果只是简单使用的话是不用详细了解具体的语法规则的。 一、xpath怎么用&#xff1…

计算机网络:应用层(二) Web与http协议

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

Cloudflare始终使用HTTPS且带参数跳转到www的域名

文章目录 设置教程设置图跳转实测 设置教程 关闭 SSL/TLS -> 边缘证书 的 Always Use HTTPS 规则 -> 页面规则 -> URL: http://www.example.com/* 设置成始终使用HTTPS 规则 -> 页面规则 -> URL: example.com/* 设置成 转发URL301重定向到 to https://www.ex…

【网络安全】HTTP Slowloris攻击原理解析

文章目录 Slowloris攻击的概念Slowloris攻击原理Slowloris攻击的步骤其他的DDoS攻击类型UDP FloodICMP (Ping) FloodSYN FloodPing of DeathNTP AmplificationHTTP FloodZero-day DDoS 攻击 推荐阅读 Slowloris攻击的概念 Slowloris是在2009年由著名Web安全专家RSnake提出的一…

西南交通大学【数电实验7---按键防抖动设计】

实验电路图、状态图、程序代码、仿真代码、仿真波形图&#xff08;可以只写出核心功能代码&#xff0c;代码要有注释&#xff09; 一共四个状态&#xff1a;1.未按下时空闲状态 2.按下抖动滤除状态 3.按下稳定状态 4.释放抖动滤除状态 在第一个状态时&#xff0c;等待按键按下&…

智能优化算法应用:基于探路者算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于探路者算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于探路者算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.探路者算法4.实验参数设定5.算法结果6.参考文…

轻松制作健身预约小程序

如果你想制作一个健身预约小程序&#xff0c;实现高效预约与健身管理&#xff0c;可以按照以下步骤进行操作。 第一步&#xff1a;注册登录乔拓云平台&#xff0c;进入后台 第二步&#xff1a;点击【轻应用小程序】&#xff0c;进入设计小程序页面。 第三步&#xff1a;在设计小…

Java---Collection讲解(一)

文章目录 1. 集合体系结构2. Collection集合概述和使用3. Collection集合的遍历4. 小案例分析5. List集合概述和特点6. List集合的特有方法7. 小案例分析 1. 集合体系结构 集合体系结构如下所示。在实现时我们需要使用接口的具体实现类。 2. Collection集合概述和使用 1. Colle…

MySQL数据库 入门

目录 一、MySQL概述 二、MySQL安装 安装数据库 配置数据库 启动停止数据库 客户端连接数据库 三、数据模型 四、SQL 一、MySQL概述 先来讲解三个概念&#xff1a;数据库、数据库管理系统、 SQL 。 而目前主流的关系型数据库管理系统的市场占有率排名如下&#xff1a; …

【jitterbuffer】3:VCMJitterEstimator及所需的概率知识:期望、方差、协方差

期望 : 全国的平均积雪深度 期望值为负 概率就是 不同国家的面积了,总面积是1 期望计算公式 某种函数的期望 K的求和范围 计算期望 1

windows任意APP注册成服务(以nginx服务为例)

前言 最近需要部署一个前端项目&#xff0c;用到了nginx。正常情况是&#xff1a;需要使用时nginx服务时&#xff0c;进入到nginx.exe所在目录&#xff0c;然后执行&#xff1a;start nginx.exe&#xff0c;但是线上环境这样搞的话还是不太科学。由于好奇心&#xff08;懒&…

解读unity内置的软阴影处理方式

解读unity内置的软阴影处理方式&#xff1a; 参考网址&#xff1a; https://blog.csdn.net/cgy56191948/article/details/105726682 https://blog.csdn.net/weixin_45776473/article/details/119582218 https://tajourney.games/5482/ 上面的博客已经论述了&#xff0c;为何出现…

猫头虎博主深度解析:Tomcat中的`IllegalArgumentException`异常处理全攻略 ️

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Etsy运营秘籍——打造大卖店铺的九大技巧

在跨境电商的浩瀚海洋中&#xff0c;Etsy 作为一个注重手工制作与独特设计的平台&#xff0c;吸引了众多卖家的关注。在 Etsy 的世界里&#xff0c;成功运营小店需要更多的智慧和技巧。作为一位在 Etsy 上开店多年的老手&#xff0c;在这过程中也总结了不少经验&#xff0c;这篇…

微服务组件Sentinel的学习(2)

限流规则 流控模式直接模式关联模式链路模式 流控效果快速失败warm up排队等待 热点参数限流 流控模式 添加限流规则&#xff0c;可点击高级选项&#xff0c;有三种流控模式选择&#xff1a; 直接:统计当前资源的请求&#xff0c;触发闻值时对当前资源直接限流&#xff0c;也是…

LeetCode力扣每日一题(Java):69、x 的平方根

一、题目 二、解题思路 1、 我的思路 我的思路是直接循环暴力破解&#xff0c;定义计数器i&#xff0c;从1开始递增&#xff0c;直到i*i大于或等于x 于是有了如下代码 int i 1;while(true){if(i*i<x){i;}else if(i*ix){return i;}else{return i-1;}} 但提交之后超出了…

开启虚拟世界的新篇章

近年来&#xff0c;随着科技的迅猛发展&#xff0c;人们生活方式的改变也日益显著。而其中一个最引人注目的变化便是数字人直播的兴起。数字人直播以其独特的魅力&#xff0c;成为了当今社会中备受关注的热门话题。本文将从数字人直播的定义、应用领域以及未来发展等方面&#…