12.泛型

rust笔记12:rust的泛型 Rust 的泛型实现是其类型系统的核心特性之一,它允许编写灵活且可重用的代码,同时保持类型安全和性能。以下从 泛型数据类型、泛型类型参数、trait bound 和 生命周期泛型 四个方面详细介绍 Rust 的泛型实现,并解释编译器如何通过 静态分发 处理泛型。 阅读详情

1.为什么要有泛型?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ArrayList<String> strings = new ArrayList<>();
        strings.add("123");//只能添加字符串
@Test
    public void test(){
        ArrayList arrayList = new ArrayList();
        //存放学生的成绩
        arrayList.add(123);
        arrayList.add(214);
        arrayList.add(187);
        arrayList.add(1877);
        arrayList.add(1321);
        arrayList.add(12311);       
        //问题一:类型不安全
        arrayList.add("Tom");
        for (Object object : arrayList){
            //问题二:强转时可能出错  java.lang.ClassCastException
            int stuScore = (Integer)object;
            System.out.println(stuScore);
        }
    }
//z在集合中使用泛型的情况
    @Test
    public void test2(){
        ArrayList<Integer> ints = new ArrayList<Integer>();
        //ints.add("dsd");编译不通过
        ints.add(123);
        ints.add(123);
        ints.add(123);
        ints.add(123);
        ints.add(123);
        Iterator<Integer> iterator = ints.iterator();
        while (iterator.hasNext()){
            //避免了强转操作
            System.out.println(iterator.next());
        }
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        map.put("tom",15);
        map.put("tom2",15);
        map.put("tom3",15);
        map.put("tom4",15);
        //Map.put(123,123)
        Set<Map.Entry<String,Integer>> entrySet = map.entrySet();
        Iterator<Map.Entry<String, Integer>> iterator1 = entrySet.iterator();
        while (iterator1.hasNext()){
            Map.Entry<String, Integer> next = iterator1.next();
            String key = next.getKey();
            Integer value = next.getValue();
            System.out.println(key + "  " + value);
        }
    }

map循环

HashMap<String, Integer> hashMap = new HashMap<String, Integer>();
        hashMap.put("sd",12);
        hashMap.put("sd1",12);
        hashMap.put("sd2",12);
        hashMap.put("sd3",12);
        hashMap.put("sd4",12);
        hashMap.put("sd5",12);
        Set<Map.Entry<String, Integer>> entries = hashMap.entrySet();
        Iterator<Map.Entry<String, Integer>> iterator = entries.iterator();
        while (iterator.hasNext()){
            Map.Entry<String, Integer> next = iterator.next();
            String key = next.getKey();
            Integer value = next.getValue();
            System.out.println(key);
            System.out.println(value);
        }

2.在集合中使用泛型
在这里插入图片描述
在这里插入图片描述
3 自定义泛型结构
 自定义泛型类
 自定义泛型接口
 自定义泛型方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

@Test
    public void test(){
        //如果定义了泛型类,实例化没有指明泛型类型,则认为此泛型类为object类型
        //要求:如果大家定义的类时带泛型的,建议在实例化时指明类的泛型
        Order order = new Order();
        order.setOrderT(123);
        order.setOrderT("dsd000");

        //建议:实例化时指明泛型;
        Order<String> stringOrder = new Order<>();
        //stringOrder.setOrderT(123);编译错误
        stringOrder.setOrderT("AA");
        stringOrder.setOrderT("CC");
        stringOrder.setOrderT("DD");
        stringOrder.getOrderT();
        SubOrder subOrder = new SubOrder();
        subOrder.setOrderT(123);//由于子类在继承带泛型的父类时,指明了泛型类型,则实例化子类对象时,不再需要指明泛型
//        subOrder.setOrderT(123);
        SubOrder1<String> subOrder1 = new SubOrder1();
        subOrder1.setOrderT("123");
        //subOrder1.setOrderT(123);
    }
@Test
    public void test2(){
        //泛型不同的引用不能相互赋值
        ArrayList<String> arr = new ArrayList<>();
        ArrayList<Integer> arr1 = new ArrayList<>();
        //arr = arr1;
        //arr.addAll(arr1);
    }
//泛型方法:在方法中出现了泛型结构,泛型参数与类的泛型参数没有任何关系
    public static <E> List<E> copyFromArrayToList(E[] arr){//可以使用静态static,因为它不需要类的泛型确定,而是调用方法时确认;
    //第一个<E> 是方法中参数的泛型
    //第二个是List<E>返回类型list是带泛型的
        ArrayList<E> list = new ArrayList<>();
        for (E e : arr){
            list.add(e);
        }
        return list;

    }
    //下面方法不是泛型方法
    public T getOrderT() {
        return orderT;
    }

    public void setOrderT(T orderT) {
        this.orderT = orderT;
    }
@Test
    public void test3(){
        Order<String> objectOrder = new Order<String>();
        ArrayList<Integer> integerss = new ArrayList<>();
        integerss.add(223);
        integerss.add(223);
        integerss.add(223);
        integerss.add(223);

        Integer[] integers = new Integer[]{1, 2, 3, 4};
        int[] arr = new int[10];
        List<Integer> integers1 =objectOrder.copyFromArrayToList(integers);
        System.out.println(integers1);
//        System.out.println(integers12);
    }

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
creature没有继承Person,不能作为参数

4 泛型在继承上的体现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5 通配符的使用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第一个extends 必须是object或者是他的子类:上限extends:使用时指定的类型必须是继承某个类,或者实现某个接口,即<=
第二个super必须是本类或者是他的父类:使用时指定的类型不能小于操作的类,即>=

6 泛型应用举例
在这里插入图片描述
在这里插入图片描述

/**
 * describe:
 *
 * DAO: data(base) access object
 * @author suoliang
 * @create 2021-04-17:16
 */
public class DAO<T>//操作表的共性操作dao
{
    //添加一条记录;
    //....
    public void addC(T t){

    }

    //删除一条记录;
    //....
    public void remove(){}

    //修改一条记录;
    //....

    public void replace(){}
    //查询一条记录;
    //....
    public T getIndex(int index){
        return null;
    }

    //查询多条记录;
    //泛型方法:
    //举例:获取表中一共有多少条记录?long  获取最大员工入职时间:Date

    public <E> E getValue(){
        return null;
    }
}
class Customer{
    //此类对应数据库中的customers表

}
class CustomerDAO extends DAO<Customer>{//只能操作一个表的dao

}
class DAOTest{
    @Test
    public void test(){
        CustomerDAO customerDAO = new CustomerDAO();
        customerDAO.addC(new Customer());
    }
}
/**
 * describe:
 * 自定义泛型类
 *
 * @author suoliang
 * @create 2021-04-0:21
 */
public class Order<T> {
    String orderName;
    int orderid;

    //T类的内部结构就可以使用类的泛型
    T orderT;

    public Order(){
        T[] arr = (T[])new Object[10];//编译通过
    }


    public Order(String orderName,int orderid, T orderT){
        this.orderName = orderName;
        this.orderid = orderid;
        this.orderT = orderT;
    }
    //泛型方法:在方法中出现了泛型结构,泛型参数与类的泛型参数没有任何关系
    public static <E>List<E> copyFromArrayToList(E[] arr){//可以使用静态static,因为它不需要类的泛型确定,而是调用方法时确认;
        //第一个<E> 是方法中参数的泛型
        //第二个是List<E>返回类型list是带泛型的
        ArrayList<E> list = new ArrayList<>();

        for (E e : arr){
            list.add(e);
        }
        return list;

    }
    //下面方法不是泛型方法
    public T getOrderT() {
        return orderT;
    }

    public void setOrderT(T orderT) {
        this.orderT = orderT;
    }

    @Override
    public String toString() {
        return "Order{" +
                "orderName='" + orderName + '\'' +
                ", orderid=" + orderid +
                ", orderT=" + orderT +
                '}';
    }
    //静态方法不能使用类的泛型
    //异常类不能声明为泛型
//    public static void show(){  错误:因为静态方法,可以不new对象直接创建;但是没有
//        System.out.println(orderT);
//    }
}
class SubOrder extends Order<Integer>{//suborder不是泛型
    //子类继承带泛型的父类时,指明了泛型的类型,则在实例化子类对象时,不再需要指明泛型
}
class SubOrder1<T> extends Order<T>{}
class Creature{}
class Person extends Creature{}
class Man extends Person{}
class PersonTest {
    public static <T extends Person> void test(T t){
        System.out.println(t);
    }
    public void printCollection1(Collection c) {
        Iterator i = c.iterator();
        for (int k = 0; k < c.size(); k++) {
            System.out.println(i.next());
        } }
    public void printCollection(Collection<Object> c) {
        for (Object e : c) {
            System.out.println(e);
        } }
    public static void main(String[] args) {
        test(new Person());
        test(new Man());
        ArrayList arrayList = new ArrayList();
        arrayList.add(1);
        arrayList.add(1);
        arrayList.add(1);
        new PersonTest().printCollection(arrayList);

//The method test(T) in the type PersonTest is not
//applicable for the arguments (Creature)
        //test(new Creature());//
    }
    public static void addStr(List<? super Object> list){
        list.add(1);
        list.add(2);
        list.add(1);
    }
}
芒果YOLOv11改进175:DCNv4卷积,全网首发纯Pytorch实现代码,无需cuda编译|即插即用,一键运行:高效可变形卷积网络:重新思考视觉应用的动态和稀疏算子 芒果YOLOv11改进:DCNv4卷积,全网首发纯Pytorch实现代码,无需cuda编译|即插即用,一键运行:高效可变形卷积网络:重新思考视觉应用的动态和稀疏算子 阅读详情

相关推荐

数据中心机房建设标准及依据

深刻理解、尊重并恪守这些依据,是我们以科学、经济、可靠的方式,为蓬勃发展的数字经济筑牢基石的唯一路径。让我们共同努力,以标准为依据,以匠心为精神,建造更多世界一流的高效能、高可用、高智能的绿色数据中心,共同赋能数字中国的宏伟事业,支撑中华民族在数字时代的伟大复兴征程中稳步前行!今天我将力图以宏大的视角和深入的剖析,系统性地阐述数据中心机房建设所应遵循的多层次、多维度的标准依据,揭示这些依据背后的深层逻辑与时代使命,并探讨其如何共同作用于一座世界级数据中心的诞生。,以支持万兆乃至更高速率的传输。

qq_39980997的博客 1139

泛型类、泛型方法的使用与理解

本文参考《Java核心技术 II 高级特性》有关章节     一. 为什么要使用泛型程序设计           泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用。例如,我们不希望为聚集String和File对象分别设计不同的类。实际上根本不需要那么做,因为一个ArrayList类可以聚集任何类型的对象。这是一个泛型程序设计的实例。 在Java SE5.0之前,Java的泛型

虽然我很菜 1万+

Case-Based Reasoning用于RAG

在做大模型应用RAG的时候,会发现一种特殊的场景,就是基于之前的case进行回答,比如法律咨询、医疗诊断等等。这种情况的问答,需要有强有力的case支持才行,有了case支持,大模型回答会更加准确。CBR这个概念已经很久了,它是一种人工智能推理方法,它的基本思想是:遇到新问题时,先回忆相似的过去案例,再基于这些案例进行调整,得到新问题的解答。Retrieve(检索):在案例库中找到与当前问题最相似的案例。Reuse(复用):借鉴案例的解决方案来应对当前问题。

sinat_28694519的博客 938

Java泛型方法定义及方法前加<T>详解

首先要说明代表泛型,但不止T还有A、B、K、V等都是用到了java的泛型中,如果是容器类可以使用E,若键值匹配可以用K(Key)和V(Value)等,若是,则是默认是允许Object及其下的子类,也就是java的所有对象了; 首先看如下泛型方法: public static T defaultIfBlank(T str, T defaultStr) { retu

OceanSky的专栏 2万+

05、基于ALV表报实现复选框、全选、取消全选等功能

基于Function ALV实现复选框、全选及取消全选等功能

wo520yl1314的博客 2372

无迹卡尔曼滤波(UKF)推导

提出,使用了一种不同的方法来计算误差协方差矩阵。它不使用(连续时间)黎卡提方程(Riccati Equations,形如。的一类非线性方程)或(离散时间)协方差传播和更新规律。关键的思想是基于一组特殊的样本点来估计误差协方差,这些点被称为。无迹卡尔曼滤波(Unscented Kalman Filter),最初由。点(Sigma Points),这些点直接通过原始非线性模型传播。无迹变换表示有三个特殊样本点的高斯分布,称为。

生活如此美好,致敬每一个热爱“热爱”的人! 1777

java基础之泛型(泛型类,泛型接口,泛型方法,泛型上下限)

1.泛型类:在定义类的时候,在类名的后面加上<E>。 1)E只是起到占位的作用,当创建对象时,赋予真正的类型。 2)E是泛型的形参,可以是一个,也可以是多个,如果是多个,用逗号隔开。 3)泛型形参的命名规则,只要符合java的标识符规范就可以。但是,通常泛型形参是一个大写字母。如:E(element),K(key),V(value)。 4)E可以再整个类中使用。比如:类的属性,...

醒醒 1732

基于C++的MMC仿真与PSCAD建模

MMC是一种基于模块化设计的多电平换流器,通常由若干个基本单元(子模块)组成。每个子模块包含一个电容和两个开关,通过控制开关的开闭,实现输出电压的级联和多电平化。高效率:由于开关频率较低,开关损耗小,效率高。高可靠性:模块化设计使得故障模块易于更换,提高了系统的可靠性。灵活扩展:可以通过增加或减少子模块的数量,方便地调整输出电压和功率。PSCAD(Power Systems Computer Aided Design)是广泛应用于电力系统仿真的专业软件,具有强大的建模和仿真能力。

qq_38334677的博客 295

java基础:14.1 泛型

文章目录1. 回顾ArrayList类2. 泛型的概念3.通配泛型4.注意 1. 回顾ArrayList类 ArrayList是一种泛型类,具有一个泛型类型<E>,创建一个ArrayList 时,可以指定一个具体的类型来替换E。Java 提供ArrayList 类来存储不限定个数的对象。位于java.util 包中。存储在ArrayList中的元素必须是一种对象,不能使用int的基本数...

桃子味的梨 519

YOLOv11改进 | Neck篇 | 轻量化跨尺度跨通道融合颈部CCFM助力YOLOv11有效涨点

到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv11改进有效涨点专栏,本专栏目前为新开的平均质量分98分,后期我会根据各种最新的前沿顶会进行论文复现,也会对一些老的改进机制进行补充,目前本专栏免费阅读(暂时,大家尽早关注不迷路~)如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~YOLOv11有效涨点专栏——本专栏持续复习各种顶会内容——科研必备​ycb。

Snu77的博客 8082

YOLO26涨点改进 | 小目标损失函数独家改进篇 | TGRS 2025 | 引入AdaFocalLoss损失函数,改进小目标检测,自适应聚焦小目标与样本分布不平衡,提升检测精度与训练稳定性

目录一、前言:YOLO26原生损失函数在小目标检测中的核心痛点(涨点瓶颈)1.1 小目标权重不足,聚焦能力薄弱1.2 样本分布不平衡适配性差,正负样本权重失衡1.3 训练不稳定,易出现梯度消失/震荡1.4 未区分小目标与背景的冗余干扰,误检率高二、TGRS 2025顶刊灵感解析:自适应聚焦损失的核心逻辑三、全网独家创新:AdaFocalLoss损失函数设计与YOLO26适配(核心重点,可复现)3.1 AdaFocalLoss函数整体设计(独家设计,清晰可复现)3.2 各核心模块详细设计(独家创新,可直接复现

qq_36130719的博客 202

20145209刘一阳《JAVA程序设计》第六周课堂测试

第六周课堂测试 1、现有以下代码,哪些选项插入到第5行可以通过编译?(BDF) 1.import java.util.*; 2. 3.Class FindStuff { 4.public static void main (String[]args) { 5.//insert code here 6.c.put ("X", 123); 7. } 8.} A .Map c= new SortedMa...

weixin_34217711的博客 1932

后台管理系统-7-vue3之引入配置文件baseURL

mock=false,本地模拟。mock=true,线上模拟。baseURL+url=实际请求的URL。get请求param参数,post请求data参数。

qq_20466211的博客 208

Python 3.12类型系统进阶:利用新型泛型提升代码健壮性指南

Python 3.12的类型系统改进,尤其是新型泛型支持,显著提升了代码的健壮性和可维护性。通过合理使用泛型函数、泛型类和类型别名,开发者可以编写更灵活、更安全的代码。未来,随着类型系统的进一步优化,Python在静态类型检查领域的能力将更加强大。希望本文能帮助你更好地理解Python 3.12的类型系统,并在实际项目中应用这些新特性!

Momo__omoM的博客 1040

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

第12章 泛型

第12章 泛型

weixin_49762650的博客 431

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

12、泛型

自定义泛型类自定义泛型接口自定义泛型方法泛型类可能有多个参数,此时应将多个参数一起放在尖括号内。比如:泛型类的构造器如下:public GenericClass(){}。而下面是错误的:public GenericClass< E >(){}实例化后,操作原来泛型位置的结构必须与指定的泛型类型一致。泛型不同的引用不能相互赋值。

qq_44774198的博客 211

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

第12章 Java泛型

第12章 泛型

xqmids99的博客 1045

12-泛型

泛型,定义在一对尖括号中,也是一个标识符,遵循大驼峰命名法。通常都是用一个大写字母。比如泛型通配符用?,代表不确定的类型,是泛型的一个重要组成。在调用时,表示我不关心具体类型。也可以使用通配符规定调用时,传入的类型的范围,即上边界,和下边界。泛型是一种特殊的类型,你可以把泛型用在类、接口、方法上,从而实现一些通用算法。此外,使用泛型有三个步骤:定义类型变量、使用类型变量、确定类型变量。在确定类型变量这一步中,你可以用泛型通配符来限制泛型的范围,从而实现一些特殊算法。

m0_74051867的博客 778

12 - java泛型

例如:我们要声明一个学生类,该学生包含姓名、成绩,而此时学生的成绩类型不确定,为什么呢,因为,语文老师希望成绩是“优秀”、“良好”、“及格”、“不及格”,数学老师希望成绩是89.5, 65.0,英语老师希望成绩是'A','B','C','D','E'。思考:生产瓶子的厂家,一开始并不知道我们将来会用瓶子装什么,我们什么都可以装,但是有的时候,我们在使用时,想要限定某个瓶子只能用来装什么,这样我们不会装错,而用的时候也可以放心的使用,无需再三思量。类的实例表示正在运行的 Java 应用程序中的类和接口。

weixin_55702682的博客 942

12_泛型

泛型的介绍

Leiwenti的博客 689
上一篇: 11.集合练习
下一篇: 7.基础查询(select from)
漂酿男骸
博客等级 码龄7年 31粉丝 71原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值