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

Java——泛型基本总结(通配符、泛型接口、泛型方法)

extends 类:设置泛型的上限,可以设置在类或方法参数中;       ?extends Number:表示可以使用的泛型只能是Number或者Number的子类; ?...3、泛型接口(重点) 在接口上用泛型,就是泛型接口。...interface IMessage{ public void print(T t);//方法上使用泛型 } 以上,实现 了泛型接口,但是对于泛型接口的子类,有两种实现形式: 模式一:子类继续使用泛型声明...interface IMessage{ public void print(T t);//方法上使用泛型 } 泛型方法不一定还要定义在泛型声明的一个类中,也可能就是一个方法定义为泛型方法。...5、总结 1)泛型解决的问题就是向下转型所带来的安全隐患; 2)泛型的本质:类的属性或方法的参数可以由用户在使用时动态设置; 3)通配符?、? extends 类、? super 类。

3.3K30

泛型接口,泛型类和泛型通配符

java零基础入门-高级特性篇(六) 泛型 中 泛型的使用位置,除了最常见的约束集合元素,还可以使用在接口,类,方法上面。...泛型接口 在接口中定义的类型参数可以在接口中当做类型使用,任何需要类型的地方都可以使用类型参数替代。...如果java里面没有继承这个特性,那么泛型到这里就讲完了,但是,正因为java有继承这个特性,会导致很多其他的问题出现,其复杂程度会几何级的上升,后面的知识点对抽象能力和思维能力有较高的要求,请做好战斗准备...比如父类是Book,子类不能直接extends Book,而是需要指定T的类型,上例中使用的Book作为类型。 在java中,泛型不能继承和实现。为什么?WHY?...泛型提供了一个泛型通配符用于接收所有类型的泛型类型。 泛型的通配符 ? 通配符 泛型的通配符可以很好的解决所有泛型类型父类的问题,使用来作为类或接口的泛型参数,这样就可以抽象出泛型类的父类。

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

    Java进阶:【泛型】认识泛型,泛型方法,泛型类,泛型接口和通配符

    在jdk1.5以后开始,使用泛型加入泛型的优点:在编译的时候就会对类型进行检查,不是泛型的就无法添加到这个集合 public static void main(String[] args) {...引起来的参数类型,这个参数类型具体在使用的时候才会确定类型 使用了泛型后,可以确定集合的类型,在编译的时候就可以检查出来 使用泛型可能觉得麻烦,实际上使用泛型才会简单,后续的便利操作会简单许多...泛型类的构造器写法: 不同泛型的引用类型不可以互相赋值 泛型如果不指定,就会被擦除,例子就是 泛型类中的静态方法不能使用类的泛型 不能直接使用泛型数组的创建,如果非要创建 泛型方法 什么是泛型方法...Arraylist所以是同级关系 通配符 当我想要重载不同泛型的list时,常见的重载无法让我们完成需求,于是我们需要通配符 在没有通配符的情况下,下面a方法,相当于重复定义 通配符是什么?...,G的父类 使用通配符 无边界通配符( ?)

    3.5K10

    Java 泛型通配符详解

    ​Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。...| 泛型中通配符 我们在定义泛型类,泛型方法,泛型接口的时候经常会碰见很多不同的通配符,比如 T,E,K,V 等等,这些通配符又都是什么意思呢? 常用的 T,E,K,V,?...extends Animal> listAnimals 为什么要使用通配符而不是简单的泛型呢?...在类型参数中使用 extends 表示这个泛型中的参数必须是 E 或者 E 的子类,这样有两个好处: 如果传入的类型不是 E 或者 E 的子类,编译不成功 泛型中可以使用 E 的方法,要不然还得强转成...super E> 下界: 用 super 进行声明,表示参数化的类型可能是所指定的类型,或者是此类型的父类型,直至 Object 在类型参数中使用 super 表示这个泛型中的参数必须是 E 或者 E

    49230

    【Java 泛型】泛型用法 ( 泛型编译期擦除 | 上界通配符 <? extends T> | 下界通配符 <? super T> )

    文章目录 一、泛型擦除 二、泛型的上界通配符 三、泛型的下界通配符 泛型相关的限制 , 泛型限制在编译时就已经被擦除了 ; 但是 泛型的信息 , 保存在了常量表中 , 仍然可以获取到 ; 泛型擦除 是为了 泛型可以兼容 老版本的 JDK 而设计的..." Demo 中的 get 方法类型返回值是 Ljava/lang/Object , 不是泛型 T , 这就是泛型在字节码中被擦除了 ; descriptor: ()Ljava/lang/Object;...执行下面的代码 , 在运行时 , 使用反射 , 向 list1 集合中添加 int 类型的元素 , 添加成功 ; 说明在运行时 , 不再进行泛型检查 , 即使不符合泛型要求 , 也能操作成功 ; import...super T> 只能在使用 泛型 时使用 , 不能在声明 泛型类/方法 时 使用 ; Data<?

    94910

    【Java 泛型】使用上下边界通配符解决泛型擦除问题

    文章目录 前言 一、使用上边界通配符示例 二、分析字节码的附加信息 前言 上一篇博客 【Java 泛型】泛型用法 ( 泛型编译期擦除 | 上界通配符 <? extends T> | 下界通配符 <?...super T> ) 一、泛型擦除 章节中 , 讲到了泛型擦除问题 , 泛型只保留到了编译阶段 , 运行时就没有泛型的限制了 ; 本篇博客中介绍一种方法 , 使用上下边界通配符解决泛型擦除问题 ; 一、...使用上边界通配符示例 接口类 : public interface Data { void set(T t); T get(); } 实现类 : public class DataImpl...javap -p DataImpl.class 命令 , 反编译 DataImpl.class 字节码文件 , 查看类中的主要方法 ; D:\002_Project\004_Java_Learn\Main...解决 泛型擦除问题 ;

    85910

    【Java 泛型】泛型用法 ( 泛型类用法 | 泛型方法用法 | 泛型通配符 ? | 泛型安全检查 )

    : 指定 泛型类 的泛型为 String 类型 , 那么在该类中凡是使用到 T 类型的位置 , 必须是 String 类型 , 泛型类的 泛型声明 , 使用时在 类名后面 声明 ; /.../ 指定 泛型类 的泛型为 String 类型 // 那么在该类中凡是使用到 T 类型的位置 , 必须是 String 类型 // 泛型类的 泛型声明...> ---- 如果现在的泛型类型不确定 , 则使用 ? 作为通配符 , 该用法与将泛型类型指定为 Object 类型用法相同 ; ? 通配符用法示例 : // 使用 中的泛型 * 这种使用时错误的 * * 如果必须在 静态方法 中使用泛型 T * 则该泛型 T 必须是静态方法的泛型 *...// 那么在该类中凡是使用到 T 类型的位置 , 必须是 String 类型 // 泛型类的 泛型声明 , 使用时在 类名后面 声明

    10.2K30

    Java泛型接口的使用

    通过在接口中指定泛型类型参数,可以确保实现类在使用接口的方法时传入正确的类型,从而减少运行时出现类型转换错误的概率。...可读性和可维护性:通过使用泛型接口,代码中的类型信息更加清晰明了,使得代码更易读、理解和维护。通过指定泛型参数,我们可以清楚地知道接口方法的输入和输出的类型,提高代码的可读性。...强制规范:泛型接口可以强制实现类遵循一定的规范。在实现泛型接口时,编译器要求实现类必须提供指定类型的具体实现,从而确保了接口方法的正确使用和一致性。...避免类型转换:使用泛型接口可以避免频繁进行类型转换,减少因类型不匹配而引发的错误。在使用泛型接口时,编译器会自动进行类型推断和转换,使得代码更加简洁和安全。...泛型类的参数有很多应用场景,以下是一些常见的应用场景:集合类:Java中的大部分集合类都是泛型类。例如,ArrayList和LinkedList就是使用泛型类来实现的。

    23830

    Java泛型和通配符那点事

    泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。...在使用泛型的版本中并没有减少键盘录入;实际上,比使用强制类型转换的版本需要做更多键入。使用泛型只是带来了附加的类型安全。...尽管 JDK 5.0 的标准类库中的许多类,比如集合框架,都已经泛型化了,但是使用集合类(比如HashMap和ArrayList)的现有代码将继续不加修改地在 JDK 5.0 中工作。...泛型类中的类型参数几乎可以用于任何可以使用类名的地方。...这才真正烦人——现在您的泛型版本还没有普通的非泛型版本有用!  解决方案是使用类型通配符:  void printList(List<?

    1.6K50

    搞明白 Java 的通配符泛型

    Java 泛型中的通配符泛型问题困扰我很久,即 和 和 这几种泛型,到底是什么,到底怎么用。...但是,我既要泛型,又想把这两个类型的子类或者父类的泛型传进去,可不可以呢,是可以的,就是使用通配符泛型。...总结 虽然说上面的例子看起来比较难懂,但是说实话,在我们平常的开发中,通配符泛型并没有经常用到,我们只需要调用库的时候看懂库的参数是什么意思就好。 我简单的再分析下两个通配符泛型的使用场景: 在写完一个带泛型参数的函数之后,我们可以思考一下要不要用通配符泛型扩大范围,从而让我们的函数更加具有通用性。 关于为什么在普通代码中 List在普通代码中,用到 通配符泛型的情景很少。 关于 PECS,我至今没记住这几个英文单词的顺序,我认为不能生搬硬套,还是要根据实际情况分析是否合理。

    52620

    java泛型中的通配符 T,E,K,V,?

    java泛型 java泛型(generics)是jdk5引入的新特性,泛型提供了编译时类型安全检测机制,该机制运行开发者在编译时检测到非法的类型....testGeneric.setT("test"); //可以直接打印getT(),默认为String System.out.println(testGeneric.getT()); } } 泛型中的通配符...在正常情况下,只要是满足常量命名的字符串,都可以作为通配符使用,例如:T,E,K,V,A1,A1111111111,等等,但是通配符肯定不会需要用到这么多,不管是什么字符,都是代表着 "通配符",所以一般会一些有意义的字母...无界通配符,这个东西一般会在方法参数上使用,搭配 和 使用 上界通配符 该符号表示,在参数中,传入的类型必须是E或者继承与...方法中,传入了hashmap(实现了Map接口),可以正常使用 如果有多个类型参数,则使用逗号分隔即可 下界通配符<?

    68610

    一文读懂Java泛型中的通配符 ?

    作者:Jakob Jenkov 译者:涛声依旧(趣谈编程作者) 校对:刘欣(码农翻身作者)、王特 之前不太明白泛型中通配符"?"...下面是我的译文: Java泛型中的通配符机制的目的是:让一个持有特定类型(比如A类型)的集合能够强制转换为持有A的子类或父类型的集合,这篇文章将解释这个是如何做的。...下面就是答案: 在 listA 中你可以插入 A类的实例,或者A类子类的实例(比如B和C)。...从之前的论述中我们可以知道,我们不能把一个 List 或者 List 类型的变量通过参数传递给这个 processElements 方法。 泛型通配符 泛型通配符可以解决这个问题。...泛型通配符主要针对以下两种需求: ● 从一个泛型集合里面读取元素 ● 往一个泛型集合里面插入元素 这里有三种方式定义一个使用泛型通配符的集合(变量)。如下: List<?

    93830

    【Java数据结构】泛型的进阶部分(泛型通配符)

    2.泛型通配符 我们希望泛型能够处理某一类型范围的类型参数,比如某个泛型类和它的子类,为此 Java 引入了泛型通配符这个概念。 泛型通配符有 3 种形式: :被称作无限定的通配符。 :被称作有上界的通配符。 :被称作有下界的通配符。 接下来将分别介绍 3 种形式的泛型通配符。...因此,泛型的特性决定了不能往 ArrayList 集合中加入 Integer 、 Float 等对象,以防止在获取 ArrayListJava 的泛型还允许使用无限定通配符,即只定义一个?符号。 ​​​​​​​无界通配符:? 代表了任何一种数据类,需要注意的是: <?...4.总结 所以我们泛型的进阶部分就结束了,把通配符讲完了,我们数据结构部分也就结束了。接下来将学习新的篇章——数据库,数据库会不会开一个新的专栏有待商酌。

    8610

    Java基础系列(三十七):泛型继承,通配符,泛型反射

    这里需要注意泛型和Java数组之间的区别,可以将一个 Apple[]数组赋给一个类型为 Fruit[]的变量: Apple[] apples = ......泛型类可以扩展或实现其他的泛型类,比如, ArrayList类实现了 List接口,这意味着,一个 ArrayList可以转换为一个 List。...总结一下,带有超类型限定的通配符可以想泛型对象写入,带有子类型限定的通配符可以从泛型对象读取。 还可以使用无限定的通配符,例如, Pair。...为了表达泛型类型声明,使用 java.lang.reflect包中提供的接口 Type,这个接口包含下列子类型: Class类,描述具体类型 TypeVariable接口,描述类型变量(如 TextendsComparable...superT>) WildcardType接口,描述通配符 ParameterizedType接口,描述泛型类或接口类型 GenericArrayType接口,描述泛型接口 下面是一个使用泛型反射API

    64130

    Java泛型基础(二)泛型接口泛型方法# 总结

    本文首发于个人网站:Java中的泛型(二) 泛型可以应用于同一个类,该类可以针对多种类型使用,例如构建一个RedisTemplateService组件,用于处理当前应用中所有对象的缓存操作。...这篇文章主要介绍泛型应用于接口、方法和匿名内部类的一些知识点和使用案例,也包括《Java编程思想》中对应的练习题的解读。 泛型接口 泛型应用于接口,是工厂方法设计模式的一种应用。...在练习7中,作者提示可以使用“组合代替继承”实现同样的功能,我尝试自己做了下,这是我的实现: package org.java.learn.generics; import java.util.Iterator...在泛型中,基本类型无法作为类型参数,但是Java提供了自动打包和拆包的功能; 泛型方法 知识点总结 如果使用泛型方法可以取代将整个类(或接口)泛型化,那么就应该只使用泛型方法; static方法要使用泛型能力...在使用泛型类的时候,必须在创建对象的时候指定类型参数的值,但是在使用泛型方法时候,不必指明参数类型。

    3.3K30

    Java 泛型示例 - 泛型方法,类,接口

    Java 中的泛型 Java 5 中添加了泛型,以提供编译时类型检查,并消除了ClassCastException使用集合类时常见的风险。整个收集框架都进行了重写,以使用泛型进行类型安全。...Java通用类 我们可以使用泛型类型定义自己的类。泛型类型是通过类型进行参数化的类或接口。我们使用尖括号()来指定类型参数。...绑定类型参数可以与方法以及类和接口一起使用。 Java泛型也支持多个范围,即。在这种情况下,A可以是接口或类。如果A是类,则B和C应该是接口。在多个范围内,我们不能有多个类。...Java通用通配符 问号(?)是泛型中的通配符,表示未知类型。通配符可以用作参数,字段或局部变量的类型,有时还可以用作返回类型。在调用通用方法或实例化通用类时,不能使用通配符。...在以下各节中,我们将学习上界通配符,下界通配符和通配符捕获。 9.1)Java泛型上界通配符 上限通配符用于在方法中放宽对变量类型的限制。

    2.6K50

    泛型在Java中的应用

    1、泛型 作用于编译时用于对象类型检查,运行时不起作用。 泛型的声明在一对尖角括号中 ,泛型名称可以是任意字母。...2、泛型类 用于类中,在类名末尾对泛型进行声明; 在对该类进行实例化时,需要将泛型指定为具体的包装类,此时,在实例化泛型类时,就可以起到编译时检查的作用。...用于接口中,在接口名末尾对泛型进行声明; public interface GenericInterface { T getName(T t); } 当对该接口创建实现类时,有两种方式...在实现类中依然使用泛型,但需要在实现类名的后边,对泛型进行重新声明 class GenericImpl2 implements GenericInterface{ @Override...+ extends 关键字,指明该泛型只能使用约定类型及其子类型; 下限限定:使用 泛型通配符 ? + super 关键字,指明该泛型只能使用约定类型及其父类型。

    17820
    领券