首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

(二十)为什么使用泛型

# 一、为什么使用泛型 说明 泛型是一种参数化的类型 他的目的是为了增加代码的复用性,以及类型的推断 例 说明 这个方法支持对不同类型的数组进行合并然后返回,如果过我们不适用泛型的话我们得这个这个参数使用....arr1, ...arr2] } const res = join([1, 2, 3], [4, 5, 6]) res.map((x) => x * x) # 为了解决上面说明的这种情况,我们的 泛型...就派上用场了 说明 在我们定义的时候先使用泛型占位,当我们调用的时候在指定具体的类型 function join(arr1: T[], arr2: T[]): T[] { return...[...arr1, ...arr2] } // 使用泛型 const res = join([1, 2, 3], [4, 5, 6]) // 在调用内置方法的时候 TypeScript...就可以推断出它是 number 类型了 res.map((x) => x * x) # 总结-写在最后 说明 当我们使用了泛型来占位,使用的时候只说明是什么类型的数据,就提高了代码的复用性

34640
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    深度思考:为什么需要泛型?

    不知道大家平时在进行后端编程的时候有没有考虑过一个概念:泛型编程,就像面向对象、面向接口编程一样,很常用以致于用成为了大家广泛的习惯,在后端常用编程语言中,无论是Java、C++都支持泛型编程,而在2022...虽然之前在使用Java进行编程时经常用到泛型,但是未曾思考过到底为什么需要泛型?没有泛型会怎样?泛型带来了什么作用?泛型的实现原理是怎样的?等等问题。...1 什么是泛型? 维基百科提到:最初泛型编程这个概念来自于缪斯·大卫和斯捷潘诺夫. 亚历山大合著的“泛型编程”一文。...2 编程语言中泛型编程的实例 2.1 Java泛型编程 请移步这篇文章《玩转Java泛型》 2.2 Go泛型编程 package main import "fmt" type MyList[T any...:《一文搞懂Go1.18泛型新特性》(http://t.csdn.cn/XUc5Z) 3 为什么需要泛型?

    28320

    Java的泛型是什么?为什么要用它?

    ---- 零、最直观的理解——泛型是什么 泛型 ,顾名思义就是 广泛的数据类型,也就是说什么数据类型都可以。 一般来说,我们见到的泛型就是这个样子,用 T 表示。...如下所示,在类名后方申明泛型 T,接着就可以在成员变量、方法中使用泛型了。...从JDK1.5开始,引入了泛型这样一个新概念,改写了集合框架中的所有接口和类,增加了泛型的支持。...---- 二、更多应用——泛型用法远不止这些 在集合中使用泛型只是多种应用中的一种,在接口、类、方法等方面也有着泛型的广泛应用。...interface SayHeight{ public T getHeight(); }; 泛型接口同理,就是拥有一个或者多个类型参数的接口,泛型接口接口的定义方式和定义泛型类比较类似。

    14230

    【小家java】为什么说Java中的泛型是“假”的?(通过反射绕过Java泛型)

    下面先简要先说说它的优点: 泛型就是参数化类型: 适用于多种数据类型执行相同的代码 泛型中的类型在使用时指定 泛型归根到底就是“模版” 优点:使用泛型时,在实际使用之前类型就已经确定了,不需要强制类型转换...可以有: 泛型类型 泛型类 泛型接口 泛型方法 泛型的继承 extends/super 泛型通配符 为什么说Java的泛型是"假"的呢?...其实Java为了向下兼容,提出来的泛型只是一个语法糖,并不是像c++那样是真的泛型。...但是get出来的时候会报错,因为强转失败 最后 虽然java中的泛型是“假”的,会有泛型擦除的操作,但是不可否则,泛型的引入对java语言影响还是挺大的,让它上升了一大步,所以本文借两个例子,希望能够加强读者对...java泛型更深的理解。

    90320

    为啥用IDEA反编译没有擦除泛型?

    前言 Java泛型是进阶高级开发必备技能之一,了解实现泛型的基本原理,有助于写出更优质的代码。 众所周知,Java是伪泛型,是通过类型擦除(Type Erasure)来实现的。...尝试其它反编译工具 IDEA最初内置的是著名的JD-GUI反编译插件,从2016年起改为自研的反编译插件Java Bytecode Decompiler,一直沿用至今: 为了验证此问题,我计划多试试几款反编译工具...在虚拟机里启了个Windows 11来跑: 结论:没有擦除泛型类型。...总结 有些擦除了但有些没有擦除泛型类型,到底该信谁呢?当然是无条件相信javap -c,因为一切反编译操作都基于它。so结论是:Java的泛型是伪泛型,编译后泛型类型都会被擦除。...,方便开发者阅读 Java泛型引入至今已有近20年,“伪泛型”已被认为是所有开发者的共识,没有必要再在反编译后体现出来反倒大大降低了可读性。

    57320

    看了这篇泛型,下次设计链表别傻傻的用int 表示node节点的值了

    天天用的泛型也不知道啥玩意(他可能都不知道他有没有用泛型)。立图为证!当然,笔者深度还欠缺,如果错误还请指正! ?...泛型接口 既然类可以使用泛型,接口当然也可以,不过接口使用泛型和普通类的略有区别,子类在继承泛型接口的时候需要接口处声明泛型类型,否则编译器报错。例如下面的pig类。...而如果你依然想在子类中使用泛型,那就需要在子类中声明一个泛型,而接口中的泛型使用子类的泛型类型。例如下面的dog类。...interface aninal { T getValue(T t); } class cat implements aninal {//用默认Object类型 @Override public...不过泛型更多的应用于框架的编写方面,在java中其实也是随处可见。尤其是集合类: ? 看了这篇泛型,下次设计链表二叉树别傻傻的用int 表示node节点的值了!我想你该知道正确的写法了!

    51720

    为什么泛型会让你的Go程序变慢

    泛型是经常被提到的功能,在 Go 社区中一直存在争议 一方面,强烈的反对者会担心增加复杂性,担心 go 会不可避免的演变成下一个企业版的 java-lite, 或者是一个用 Monnads 代替 ifs...这是迄今为止实泛型最简单的,同时对于编译器来讲也带来开销 历史上,单态化一直是在系统语言(如C++、D或Rust)中实现泛型的首选设计。...这有很多原因,但都可以归结为用较长的编译时间来换取结果代码的显著性能提升 当你在编译器执行任何优化过程之前,将泛型代码中的类型占位符替换为其最终类型时,你就创造了一个令人兴奋的优化宇宙,而这在使用 boxed...我们找到了一个用例,在这个用例中,泛型可以帮助消除代码的重复性,而不会出现性能下降的情况。...现在它可以做一些非常强大的事情,当泛型不碍事的时候 让我给你举个例子:想象一下我们正在开发一个库,为 Go 增加函数式调用。我们为什么要这样做呢?我也不知道。很多人似乎都在做这件事。

    35830

    灵魂拷问Java泛型,extends你为什么不继承

    问题 今天在知乎上遇到这么个问题,泛型方法apply定义了泛型T和S,S extends T,按理说S只能是T的本身及其子类型,但实际中,参数s传入任何类型都能正常运行。...问题如下: 看到这个问题,自己第一反应也是很纳闷,为什么调用apply的时候,T指定了Double,S传入Integer为什么还不报错了,自己还特地去运行了一下,居然能正常运行。...类型擦除 据说在很久很久以前,JAVA混沌未开,jdk1.5这个老大哥还没有拥有泛型,后来的1.6/7/8三个弟弟有了泛型,但是为了和大哥一样,兄弟三人决定,代码中泛型你写任你写,编译的时候我就悄悄的去掉...但是为什么都是Object类型呢,S不是继承了T么?从类型擦除的角度来说,编译的时候T和S都会被擦除掉,但是S是T的子类型这一点是肯定的。...总结 说白了泛型在编译时需要先声明,才能起到约束作用。方法中的泛型要不然在类上定义,在创建类的时候指明具体类型,要不然就在定义泛型方法的时候指明具体类型。 就酱,共勉,晚安。

    43110

    Java泛型详解:为什么使用泛型?如何使用泛型?

    Java泛型详解:为什么使用泛型?如何使用泛型? 大家好!今天我要和大家一起探讨的是Java泛型,一个让我们的代码更加灵活、可读性更强的强大特性。...相信很多人都听说过泛型,但对于为什么使用泛型、如何使用泛型以及泛型的实现原理和本质,可能还有些困惑。别担心,我会通过通俗易懂的语言,带你深入了解这一话题,并为你提供一些实例演示。 前言: 大家好!...让我们开始这个有趣的泛型之旅吧! 一、为什么使用泛型? 泛型的好处可以总结为三个关键词:类型安全、代码复用和可读性。 首先,泛型可以保证类型安全。...这意味着在编译时,所有的泛型类型信息都会被擦除,即泛型参数会被替换为它们的上界类型(或者是Object类型)。...在这个过程中,所有的泛型类型信息都被擦除,代码中的泛型参数 T 被替换为它们的上界类型(或者是Object类型)。

    22910

    听了他讲的泛型,我就明白为什么他的工资比我多30万了!

    1 类 型 擦 除 Java是怎么实现泛型的?不错,类型擦除。...编译器将源码编译成字节码的时候会将你在源码中声明的类型进行擦除,比如: List list = new ArrayList(); 在编译后,字节码中只有List,运行在JVM中也是一样的,那你可能会有疑问,既然将类型擦除了,那为什么我声明的泛型为...2、第二点不得不说下兼容性,Java是在1.5版本推出的泛型,那1.5之前存在大量的线上代码没有泛型的,总不能舍弃吧,所以编译擦除后和没有泛型不是一样吗,这就兼容了之前更老的Java版本。...2、不能用来方法的重载 为什么呢?举个例子: ? 如上图所示,在不同的泛型作为参数时,编译器编译时进行类型擦除,那参数不就一样了吗?那还谈什么重载呢!...4、静态方法无法引用类的泛型类型 ? Java中的泛型是类实例化的时候才能确定泛型的准确类型,而静态方法是不需要类实例化就能调用的,显然不能使用。 5、类型强转的开销 ?

    59321

    java泛型:通过自定义ParameterizedType实现参数化类型中类型参数的替换

    需求说明 如果要动态构造一个泛型参数对象(ParameterizedType),guava提供的TypeToken工具可以部分实现这个功能: 比如下面这个例子(来自guava wiki TypeToken...String>>() {}); 但是guava提供的这个方法只能只能根据TypeParameter构造一个新的ParameterizedType,如果想根据一个已有的ParameterizedType对象替换其中的参数...其实既然TypeToken工具能根据TypeParameter构造一个新的ParameterizedType,实现上面这个需求并不复杂,不知道为什么guava没有提供这个方法(我用的版本是16)。...实现这个需求最关键的就是要有一个ParameterizedType接口的实现类,有了这个实现类,你想怎么替换都成。...ParameterizedTypeImpl(TypeToken.of(this).getRawType(), typeArgs, getOwnerType()); } /** * 用指定的类型参数替换当前对象的类型参数

    4.8K80

    为什么需要模板?—— C++ 泛型编程的核心价值

    导读 在 Windows 客户端开发中,我们经常需要处理多种数据类型:从 GUI 控件的泛型容器,到系统 API 的跨类型封装,再到高性能算法的类型抽象。...本章将深入探讨 C++ 模板如何通过泛型编程解决这些问题,并通过 Windows 注册表操作等实战案例,展示模板在真实场景中的强大能力。...一、泛型编程的意义 1.1 代码复用的困境 假设我们需要实现一个获取两个数值最大值的函数,面对不同的数据类型,传统 C++ 会写出这样的代码: // 为不同类型重复实现相同逻辑 int max_int(...其他语言的泛型 3.1 C# / Java 的泛型实现 类型擦除:运行时无法获取泛型类型信息 装箱拆箱:值类型需要转换为 object,引入性能开销 限制:无法使用运算符(如 >),需通过接口约束 //...C# 示例:无法直接比较两个泛型参数 T Max(T a, T b) where T : IComparable { return a.CompareTo(b) > 0 ?

    19910
    领券