当前位置: 首页 > 知识库问答 >
问题:

java 泛型 ??

奚昌胤
2023-11-11

Pair泛型的实际参数类型是 Interger , 为什么不能赋值给 Number

共有2个答案

岳宣
2023-11-11

? super Integer 可能是 Integer 可能是 Number 可能是 Object
不一定是 Number 所以不能直接赋值

仰翔
2023-11-11

在Java中,泛型是一种允许你在定义类、接口和方法时使用类型参数的功能。"Pair" 是一个泛型类,它接受两个类型参数,例如 <Integer, Number> 表示一个整数和一个数字的配对。

但是,你提到的情况有一个小错误。"Pair" 泛型的实际参数类型应该是 <Integer, Number>,而不是只有 <Integer>。这意味着它接受一个整数和一个数字作为参数,而不是只接受一个整数。

如果你尝试将一个 Pair<Integer, Number> 对象赋值给一个 Pair<Integer, Number> 变量,编译器会允许你这么做,因为它们的类型参数是一致的。然而,如果你尝试将一个 Pair<Integer, Number> 对象赋值给一个 Pair<Integer, Integer> 变量,编译器就会报错,因为虽然它们的类型参数都是 Integer,但是右侧的类型参数不一致。在这种情况下,你需要进行类型转换。

这是Java泛型的一个基本概念,即类型擦除。Java在编译时执行类型擦除,这意味着在运行时,泛型类型信息将被擦除,只留下原始类型信息。因此,你不能在运行时检查泛型参数的类型。这就是为什么你需要显式地进行类型转换的原因。

另外,注意 IntegerNumber 的子类,所以你可以将 Pair<Integer, Number> 对象赋值给 Pair<Integer, Number>Pair<Integer, Integer> 变量,因为 IntegerNumber 的子类。

 类似资料:
  • 问题内容: 我有一个代表文本片段的泛型类。该文本片段可能具有多种不同模式(突出显示的不同类型)中的任何一种。这些模式用枚举表示。每个项目的Enum可能不同,但是它必须实现一个接口,该接口提供了一种将其中两个结合的方法(可以突出显示并加粗显示)。所以我有一个界面: 然后我的TextFragment是文本字符串和模式的容器。但是当我尝试声明该类时: 我收到以下错误: 令牌“扩展”的语法错误,预期 根据

  • 主要内容:泛型集合,泛型类,泛型方法,泛型的高级用法前面我们提到 Java 集合有个缺点,就是把一个对象“丢进”集合里之后,集合就会“忘记”这个对象的数据类型,当再次取出该对象时,该对象的编译类型就变成了 Object 类型(其运行时类型没变)。 Java 集合之所以被设计成这样,是因为集合的设计者不知道我们会用集合来保存什么类型的对象,所以他们把集合设计成能保存任何类型的对象,只要求具有很好的通用性,但这样做带来如下两个问题: 集合对元素类型没有

  • 本小节我们将学习 Java5 以后出现的一个特性:泛型(Generics)。通过本小节的学习,你将了解到什么是泛型,为什么需要泛型,如何使用泛型,如何自定义泛型,类型通配符等知识。 1. 什么是泛型 泛型不只是 Java 语言所特有的特性,泛型是程序设计语言的一种特性。允许程序员在强类型的程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须做出声明。 我们在上一小节已经了解到,Java

  • 如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或

  • 一、泛型简介 1.引入泛型的目的 了解引入泛型的动机,就先从语法糖开始了解。 语法糖 语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家Peter.J.Landin发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。Java中最常用的语法糖主要有泛型、变长参数、条件编译、自动拆装箱、内部类等。虚拟机并不支持这些语法,它们在编

  • 开发人员在使用泛型的时候,很容易根据自己的直觉而犯一些错误。比如一个方法如果接收List<Object>作为形式参数,那么如果尝试将一个List<String>的对象作为实际参数传进去,却发现无法通过编译。虽然从直觉上来说,Object是String的父类,这种类型转换应该是合理的。但是实际上这会产生隐含的类型转换问题,因此编译器直接就禁止这样的行为。 类型擦除 Java中的泛型基本上都是在编译器