首页 > 其他分享 >泛型中extends和super的区别

泛型中extends和super的区别

时间:2024-11-11 14:59:12浏览次数:1  
标签:读取 List 类型 extends 泛型 super

泛型中的 ​​extends​​​ 和 ​​super​​ 关键字用于设置类型参数的上下界,控制可以传递给泛型类型的参数类型。它们的区别在于限制的方向和用途:

1.extends:

  • 上界限制: 使用 ​​extends​​ 关键字定义了一个类型参数的上界,意味着传入的类型必须是指定类型或其子类型。
  • 读取操作: 当泛型参数有上界限制时,允许进行读取(get)操作,因为可以确保所有对象至少有指定类型的方法和属性。
  • 写入限制: 由于Java的类型擦除和安全性考虑,如果有上界限制,直接添加对象到集合可能会受到限制(特别是当使用非具体类型如 ​​? extends T​​ 时)。
  • 示例: ​​List<? extends Number>​​ 可以接受 ​​List<Integer>​​ 或 ​​List<Double>​​ 等,但你不能直接向这样的列表中添加元素,除了 ​​null​​,因为编译器无法确定确切的类型。

2.super:

  • 下界限制: 使用 ​​super​​ 关键字定义了一个类型参数的下界,意味着传入的类型必须是指定类型或其父类型。
  • 写入操作: 允许写入(put)操作,因为你总是可以向上转型为基类,所以可以安全地添加基类及其子类的实例。
  • 读取限制: 读取时可能需要类型转换,因为集合中可能包含多种类型,所有只能通过基类引用访问。
  • 示例: ​​List<? super Number>​​​ 可以接受 ​​List<Number>​​​、​​List<Object>​​​ 或任何Number的父类的List,你可以向这样的列表中添加 ​​Number​​ 或其任何子类的实例。

 

总结来说,​​extends​​ 通常用于确保可以安全地使用对象的特性(即读取),而 ​​super​​ 用于确保可以安全地插入对象(即写入)。在实际应用中,根据你需要执行的操作(读或写)来决定使用哪一个。

 

标签:读取,List,类型,extends,泛型,super
From: https://www.cnblogs.com/89564f/p/18539704

相关文章

  • ArkTS的进阶语法-1(泛型,工具类型,空安全)
     目录ArkTS的进阶语法1.泛型......
  • 深入理解 Java 反射与泛型:类型擦除与强制类型转换
    深入理解Java反射与泛型:类型擦除与强制类型转换在Java编程中,反射(Reflection)和泛型(Generics)是两个强大且常用的特性。反射允许我们在运行时检查和操作类、方法、字段等,而泛型则允许我们编写更加通用和类型安全的代码。然而,Java的泛型机制与类型擦除(TypeErasure)密切相关,这使......
  • laravel octane:用supervisor管理octane服务
    一,ubuntu安装supervisor1,用apt安装#aptinstallsupervisor2,安装完成后查看状态:#systemctlstatussupervisor.service●supervisor.service-SupervisorprocesscontrolsystemforUNIXLoaded:loaded(/lib/systemd/system/supervisor.service;enabled;......
  • .NET Core 泛型底层原理浅谈
    简介泛型参考资料烂大街,基本资料不再赘述,比如泛型接口/委托/方法的使用,逆变与协变。泛型好处有如下几点代码重用算法重用,只需要预先定义好算法,排序,搜索,交换,比较等。任何类型都可以用同一套逻辑类型安全编译器保证不会将int传给string简单清晰减少了类型转换代码性能更......
  • ts-泛型&类型声明文件
    泛型泛型允许我们在定义函数、类或接⼝时,使⽤类型参数来表示未指定的类型,这些参数在具体使⽤时,才被指定具体的类型,泛型能让同⼀段代码适⽤于多种类型,同时仍然保持类型的安全性泛型函数//设置泛型使用<T>,T是自定义名称,在函数中使用T表示该类型functionuser<T>(data:T):T{......
  • C# WebSocket【使用SuperWebSocket实现】
    一)SuperWebSocket实现服务端1、创建窗口程序,WindowsFormsWebsocketServer2、添加程序包工具-->Nuget包管理-->管理解决方案的Nuget程序包-->搜索SuperWebSocket,选择SuperWebSocketNETServer,点击右侧安装,等待安装完成,安装完成以后,项目会多出很多引用库,如下publicpart......
  • TypeScript中的类型注解、Interface接口、泛型
    一、认识TypeScript1.概述TypeScript是具有类型语法的JavaScript,是一门强类型的编程语言。它是JavaScript的超集(js中的所有元素都属于ts),这意味着任何有效的JavaScript代码本身也是有效的TypeScript代码。2.优点静态类型检查TypeScript在编译阶段就可以检查类......
  • Java的泛型
    Java的泛型(Generics)是一种编程技术,它允许类、接口和方法在定义时使用参数化类型。通过泛型,可以编写更加通用和类型安全的代码。以下是Java泛型的一些关键知识点:1. 泛型类(GenericClass)定义泛型类时,使用尖括号 <> 来声明类型参数。例如:publicclassBox<T>{priva......
  • 泛型数组列表_演练
    ex1:基础练习基础练习请尽量独立完成(不要借助AI,实在不会才看参考代码)。原始数组学生类:packageex1;publicclassStudent{protectedStringname;protectedintscore;publicStudent(Stringname,intscore){this.name=name;this.sc......
  • 【Python】深入解析Python中的多重继承与MRO:原理、C3线性化算法与super()用法
    解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界Python的多重继承机制允许一个类从多个父类中继承属性和方法,这带来了极大的灵活性和复用性,但也引发了“菱形继承”问题,即多条继承路径导致同一属性或方法重复调用。为了解决此问题,Python引入了MRO(方法解析顺序)规......