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

Java泛型类型中的"super“关键字有什么问题

Java泛型类型中的"super"关键字用于限制泛型类型的上界,表示泛型类型必须是指定类型的父类或者父类的父类。然而,使用"super"关键字也会带来一些问题。

  1. 无法获取具体类型:使用"super"关键字定义的泛型类型,无法直接获取具体的类型信息。因为"super"关键字表示的是某个未知的父类,无法确定具体的类型。
  2. 无法添加元素:当使用"super"关键字定义泛型类型时,无法向泛型集合中添加元素。这是因为无法确定具体的类型,无法确保添加的元素是兼容的。
  3. 需要进行类型转换:当使用"super"关键字定义泛型类型时,获取元素时需要进行类型转换。因为无法确定具体的类型,需要手动进行类型转换,增加了代码的复杂性和出错的可能性。
  4. 限制了灵活性:使用"super"关键字定义的泛型类型,限制了类型的灵活性。只能接受指定类型及其父类,无法接受其他类型,降低了代码的可复用性和扩展性。

尽管存在以上问题,"super"关键字在某些场景下仍然有其优势和应用场景。例如,当需要向泛型集合中添加不同类型的元素时,可以使用"super"关键字限制上界,确保添加的元素是兼容的。此外,在一些框架和库中,也会使用"super"关键字来定义回调函数或者处理器,以实现更灵活的扩展。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JAVA

,用来灵活地将数据类型应用到不同类、方法、接口当中。将数据类型作为参数进行传递。 2.1、类型用于类定义,被称为类。通过可以完成对一组类操作对外开放相同接口。...在java,定义非常简单,但是方法就比较复杂了。...可以类型与T相同,也可以不同。 //由于方法在声明时候会声明,因此即使在并未声明,编译器也能够正确识别方法识别的。...T,注意这个T是一种全新类型,可以与声明T不是同一种类型。...> coll){} } 3.3、受限 之前设置时候,实际上是可以任意设置,只要是类就可以设置。但是在JAVA可以指定一个上限和下限。 上限: 格式: 类型名称 <?

1.4K10

Java

THink Java实现了参数化类型概念,使代码可以应用与多种类型。...字面含义是:“适用于许多许多类型在编程语言中出现时,其最初目的是类或方法能够表达最广泛能力,但是Java并没有这么牛。...个人通俗一点理解:在Java当我们定义了一个时候,这个可以被定义为任何类型,因为在java当定义了之后,在进行类编译时候会将改变为代码赋予对象类型类型擦除)。...;当操作类型时,不需要使用类型具体功能时,只使用Object类功能。那么可以用 ? 通配符来表未知类型。 4.6 方法 在java,定义非常简单,但是方法就比较复杂了。...4.7 关于数组要提一下 看到了很多文章中都会提起数组,经过查看sun说明文档,在java是”不能创建一个确切类型数组”

1.1K20

java

但是请注意类或接口上声明等,不能用于声明静态变量,也不能用在静态方法,因为静态成员初始化是随着类初始化而初始化,此时具体类型还无法确定,那么形参类型就不确定,所以不要在静态成员上使用类或接口上形参类型...在一种更极端情况下,程序需要为设定多个上限,那么多个上限之间用&符号进行连接,并且规定在这多个上限,至多有一个父类上限,但可以多个接口上限,表明该类型形参必须是其父类子类(包括其父类本身),...super T> dest,Collection src )。可以表示依赖关系,不管src集合元素类型T是什么,只要dest集合元素类型是T或T父类即可。...在严格代码,使用类和接口时,就应该明确指定具体类型。...案例需求:已知省份Province类型、属性省份编号id和名称name,城市City类型、属性城市编号id和名称name、所属省份编号pid。如果要存储如下信息到一个Map,那么如何指定

2.6K30

【说站】java类型擦除转换

java类型擦除转换 说明 1、值存在于编译阶段,当代码进入虚拟机时,值将被删除。 2、这个特征被称为类型删除。当被删除时,他两种转换方法。...第一种是,如果没有设置类型上限,将转换为Object类型,第二种是如果设置了类型上限,将转换为其类型上限。...getT() {         return t;     }     public void setT(T t) {         this.t = t;     } } //通过反射调用获取他们属性类型...Field field : aClass.getDeclaredFields()) {         System.out.println("Test1属性:" + field.getName() + "类型为...:" + field.getType().getName());     } } 以上就是java类型擦除转换方法,希望对大家有所帮助。

1.2K20

Java详解

:可以在类或方法预支地使用未知类型。 tips:一般在创建对象时,将未知类型确定具体类型。当没有指定时,默认类型为Object类型。 使用好处 那么带来了哪些好处呢?...定义和使用含有类 定义格式: 修饰符 class 类名 { } 例如,APIArrayList集合: class ArrayList{ public boolean...当使用类或者接口时,传递数据类型不确定,可以通过通配符<?...但是一旦使用通配符后,只能使用Object类共性方法,集合中元素自身方法无法使用。 ⛷️通配符基本使用 通配符:不知道使用什么类型来接收时候,此时可以使用?,?表示未知通配符。...但是在JAVA可以指定一个上限和下限。 上限: 格式: 类型名称 对象名称 意义: 只能接收该类型及其子类 下限: 格式: 类型名称 <?

79620

Java细节

如果没有 学习Java,必不可少一个过程就是需要掌握起源于JDK1.5,为什么我们要使用呢?...主要运用在譬如Java容器API等需要对多个对象进行管理部分。 早期(不支持时期)Java代码,我们在使用容器时候,需要在类型转换前手动进行类型转换验证工作来防止异常。...首先,进行麻烦类型判断了;其次,通过编译器支持,当我们使用时候,编译器会在编译时期就为我们解决好类型问题,这样一来,可以保证,在运行时期,肯定不会因为类型转换出现异常。...f(new Apple()) // 由于类型推到,当我们传入一个Apple对象时候,Java会为我们自动推导其类型,所以可以省略: obj.f(new Apple()); 但是请注意,在一个再定义方法...super SomeClass> 一二 在上面实例我们使用了这样无界通配符,但是它太宽泛了,甚至可以说它与List无差别。于是,我们需要一种限定方式,来限定我们容器类类型一定边界。

22920

Java super与 this 关键字作用

super关键字: 我们可以通过super关键字来实现对父类成员访问,用来引用当前对象父类。 this关键字: 指向自己引用。...注意事项 this和super在调用构造方法时,必须出现在构造方法第一行 当构造方法不调用别的构造时,系统会默认调用父类空参构造,当我们手动调用构造后,系统就不会再调用父类空参构造了 每个构造方法只能调用一个...this或super 简单例子 class Animal { void eat() { System.out.println("animal : eat"); } } class...super.eat(); // super 调用父类方法 } } //调用测试 public class Test { public static void main(String...访问构造方法: this() 调用本类无参构造 this(参数) 调用本类参构造 super() 调用父类无参构造 super(参数) 调用父类参构造 太简单了,代码这里就不写了

21620

Java基础】Java使用

本篇目录 1- 是什么 2- 作用 3- 定义 4- 使用 1 是什么 如下代码是一个使用了实体类,E表示这里类型使用,意思是可以为任意类型,也包括引用数据类型...3 定义 定义需要在类名或接口名后指定,格式如: public class Test{} 这里大写英文字母并不是必须是E,但在开发规约一般使用E、K、V、T来定义...4 使用 定义了后,可在类中代码即可使用该字母作为数据类型来定义变量。...没错,Java很多地方都大规模使用了,接触最多就是集合框架,如: List list=new ArrayList(); 这是我们在初始化一个ArrayList实例对象,...并且指定了它为String类型,也就是说我们接下来要在List添加元素的话,只能添加String类型,添加其它类型元素则会报错。

53720

Java - 细节篇

前言 大家好啊,我是汤圆,今天给大家带来是《Java - 细节篇》,希望对大家有帮助,谢谢 细心观众朋友们可能发现了,现在标题不再是入门篇,而是各种详细篇,细节篇; 是因为之前几篇比较简单...,但实际上跟多态还是区别的 从本质上来讲,多态是Java一个特性,一个概念,是真实存在一种类型; 目录 下面我们详细说下Java相关知识点,目录如下: 什么是类型参数 为啥要有...演变史 类型擦除 应用场景 通配符限定 动态类型安全 等等 正文中大部分示例都是以集合为例来做介绍,因为用比较多,大家都熟悉 正文 什么是类型参数 类型参数就是参数类型,它接受类作为实际值...还是区别的,抽象类和抽象方法是相互关联,但是类和方法之间没有联系 集中到类方向来说:多用在集合类,比如ArrayList 如果是自定义的话,推荐用方法,原因二: 脱离类单独使用...extends T>一般用在形参,这样我们需要哪个子类型,只需要传入对应子类对象就可以了,从而实现多态 为啥可以插入呢?

74731

【进阶之路】Java类型擦除式

---- highlight: a11y-light Java选择类型叫做类型擦除式。什么是类型擦除式呢?...因此,对于运行期间Java程序来说ArrayList和ArrayList其实是同一个类型。这也就是Java选择类型叫做类型擦除式原因。...也是因为“二进制兼容性”原则,Java在1.4.2之前版本都没有支持过,如果需要在1.5之后版本突然引入,就需要考虑让以前程序在新版本虚拟机还能正常运行。...但是Java设计人员并没有这么做,而是选择了把已有的不支持类型化,不添加任何平行于已有类型版。...因为类型可擦除,我们无法直接从List取得参数化类型T,所以只能从额外参数传递一个数组类型进去进行转换。

1.1K40

Java:解读类型安全利器

但是,传统Java使用Object类型作为通用数据类型会存在一些问题,如数据类型转换等。Java出现就是为了解决这些问题。摘要本文将介绍Java基本概念、语法和应用场景。...Java定义采用尖括号“”将类型参数括在一起,如下所示:class ClassName { // ...}其中,T为类型参数,可以是任意非关键字标识符。...应用场景案例集合类中使用Java集合类,最常见使用地方是在List、Set和Map等容器类。...类代码方法介绍类在Java类用来替代具体数据类型。...类还包含了一个重写toString方法,用于将实例对象转化为字符串。方法在Java方法需要在方法名前面添加类型参数列表,用来替代具体数据类型

16571

java通配符 ? extends T 和 ? super T 区别和用法

https://www.cnblogs.com/chyu/p/4630798.html 关于Java,这里我不想总结它是什么,这个百度一下一大堆解释,各种java书籍也有明确定义,只要稍微看一下就能很快清楚....从英文名字Generic type也能看出,Generic普通、一般、通用,是一个概括性词,那么从名字上也就好理解了,它是一种通用类型,是java各种类型概括. ?...是java通配符,它代表java某一个类,那么就代表类型T某个子类,就代表类型T某个父类....,我们完全可以继续定义个小小红苹果来继承小红苹果,这个继承是没有下限.这个反推出一个结论是一个上限T类型.那么我们马上就发现实际上是下限T类型....super 苹果> list = new ArrayList(); list.add(苹果); //无任何问题 推荐一位走心coder,致力于打造一款高质量技术学习社群,他专注于分享

1.1K20

Java两个关键字——super、this

一、super superjava中方一个关键字,用它可以引用父类成员: super可用于访问父类定义属性 super可用于调用父类定义成员方法 super可用于在子类构造器调用父类构造器...使用super关键字注意事项: 1、当子类和父类都有同名属性时,在子类如果要使用父类属性 super ....---"+num);   } } 解释一下上面的这段代码:在Child类第一个构造函数里面,super(30);它会去调用父类一个int参数构造方法。...在Child类第二构造函数里面,虽然没有super关键字出现,但是系统会默认给它一个super();去调用父类默认也就是无参构造方法。...上面的代码,我们删除了父类无参构造方法,而在子类参构造方法,系统默认调用父类无参构造方法,所以会报错,这里需要注意。

50630

Java 基础篇】Java 类型安全编程指南

Java 编程是一项强大特性,它允许您编写更通用、更安全和更灵活代码。无论您是初学者还是经验 Java 开发人员,了解和掌握都是非常重要。...限制和约束 在使用时,一些限制和约束需要注意: 类型擦除 Java 是通过类型擦除来实现。这意味着在编译时,类型信息会被擦除,代码只剩下原始类型。...这些高级主题超出了本篇博客范围,但可以在进一步学习 Java 时深入探讨。 使用注意事项 当使用时,一些重要注意事项和最佳实践,以确保您代码正确、安全且易于维护。...extends T> 表示类型上限,通配符 表示类型下限。选择合适通配符可以提高代码可用性和安全性。...Java 强大且重要特性,它可以帮助您编写更安全、更通用代码。通过深入学习和实践,您可以更好地理解和应用,提高 Java 编程效率和质量。

29930
领券