Java泛型的使用场景 深藏阁楼爱情的钟 2021-11-11 20:06 228阅读 0赞 ## 一、泛型概括 ## 泛型的本质是**参数化类型**,也就是说所操作的数据类型被指定为一个参数的方式传递,类似于方法中的变量参数。可以用在类、接口、方法的创建中,分别简称为泛型类、泛型接口、泛型方法。 **在没有使用泛型的情况下,如果要实现参数“任意化”,通常会定义成Object类型来接受,然后强制类型转换使用;而强制类型转换有明显的缺点,就是必须要知道实际参数的具体类型的情况才可以进行转换,同时在强制转换的过程中,编译器不会报错提示的,只有在运行阶段才会出现异常,一定程度上存在安全隐患。** ## 二、泛型的使用 ## 泛型的使用方式,可以在类、接口、方法中使用,分别简称之泛型类、泛型接口、泛型方法,并且通过泛型实现数据类型的任意化,即灵活、又有安全性,易于维护。 注: **JDK在编译之后程序会采取去泛型化的措施。也就是说Java中的泛型,只在编译阶段有效。在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段。** ## 三、类型通配符 ## **类型通配符就是匹配任意类型的形参。** 类型通配符是一个问号(?),将一个问号作为类型形参传递给List集合,写作:List<?>,(意思是元素类型未知的List)。 这个问号(?)被成为通配符,它的元素类型可以匹配任何类型。 例子: public void test(List<?> c){ for(int i =0;i<c.size();i++){ System.out.println(c.get(i)); } } 调用: List<String> list = new ArrayList<String>(); list.add("333"); List<Integer> list2 = new ArrayList<Integer>(); list2.add(3334); test(list); test(list2); **上限通配符** 如果想限制使用泛型类别时,只能用某个特定类型或者是其子类型才能实例化该类型时,可以在定义类型时,使用extends关键字指定这个类型必须是继承某个类,或者实现某个接口,也可以是这个类或接口本身。 //它表示集合中的所有元素都是Shape类型或者其子类 List<? extends Shape> 这就是所谓的上限通配符,使用关键字extends来实现,实例化时,指定类型实参只能是extends后类型的子类或其本身。 **下限通配符** 如果想限制使用泛型类别时,只能用某个特定类型或者是其父类型才能实例化该类型时,可以在定义类型时,使用super关键字指定这个类型必须是是某个类的父类,或者是某个接口的父接口,也可以是这个类或接口本身。 //它表示集合中的所有元素都是Circle类型或者其父类 List <? super Circle> 这就是所谓的下限通配符,使用关键字super来实现,实例化时,指定类型实参只能是extends后类型的子类或其本身。 ## 四、类型擦除 例子: ## Class c1=new ArrayList<Integer>().getClass(); Class c2=new ArrayList<String>().getClass(); System.out.println(c1==c2); 输出: true ** 这是因为不管为泛型的类型形参传入哪一种类型实参,对于Java来说,它们依然被当成同一类处理,在内存中也只占用一块内存空间。从Java泛型这一概念提出的目的来看,其只是作用于代码编译阶段,在编译过程中,对于正确检验泛型结果后,会将泛型的相关信息擦出,也就是说,成功编译过后的class文件中是不包含任何泛型信息的。泛型信息不会进入到运行时阶段。** ## 五、总结 ## ** 科普一下,jdk是1.5开始就推出了泛型一说,作为jdk1.5的新特性,在1.5之前jdk都是通过object来进行强制转换的。** ** 另外,一提到泛型,相信大家用到最多的就是在集合中,其实,在实际的编程过程中,自己可以使用泛型去简化开发,且能很好的保证代码质量,例如调第三方接口的返回类型,在接口返回接受对象泛型化,有利用程序的扩展和可维护性等,以及Json在做数据转换成实体对象时就可以去通过泛型做Util。**
相关 Java泛型及其应用场景:如何在类中使用泛型? 在Java中,泛型是一种允许创建具有相同类型参数的类、接口或方法的技术。这有助于提高代码的灵活性和通用性。 以下是使用泛型在类中创建实例的基本步骤: 1. 定义类型参数:这 我就是我/ 2024年09月18日 12:30/ 0 赞/ 7 阅读
相关 Java泛型:常见使用场景和误用情况 Java泛型是一种允许在编译时决定类型的技术。它主要用于集合类(如List、Set、Map等)以及自定义的抽象类或接口,以增加代码的通用性和安全性。 常见使用场景: 1. 谁借莪1个温暖的怀抱¢/ 2024年09月18日 00:54/ 0 赞/ 7 阅读
相关 深入浅出:Java泛型的使用场景及优缺点 Java泛型是一种强大的工具,它允许我们编写能够处理多种数据类型的代码。下面我们将讨论泛型的一些使用场景、优点和缺点。 1. **类型安全**: - 使用泛型可以确保在 左手的ㄟ右手/ 2024年09月16日 19:12/ 0 赞/ 8 阅读
相关 理解Java语言的泛型使用场景 在Java编程中,泛型(Generics)是一种强大的工具,用于创建类型安全、高度可重用的类和方法。以下是泛型使用的主要场景: 1. 集合类:如ArrayList, Hash 淡淡的烟草味﹌/ 2024年09月16日 06:03/ 0 赞/ 14 阅读
相关 Java泛型使用问题:真实场景与解答 在Java编程中,泛型是一种类型参数化的工具,它允许我们在编写代码时避免类型擦除(boxing and unboxing)带来的性能损失。 下面是一些实际场景和相应的解答: 迈不过友情╰/ 2024年09月16日 06:03/ 0 赞/ 7 阅读
相关 Java泛型编程中的限制和使用场景 在Java的泛型编程中,泛型是一种类型参数,它允许我们创建具有通用数据类型的类。然而,Java的泛型并没有提供完全的类型安全,而是通过一定的限制来确保安全性。 1. 类型擦除 绝地灬酷狼/ 2024年09月10日 16:03/ 0 赞/ 29 阅读
相关 【Java】泛型 之 使用泛型 使用`ArrayList`时,如果不定义泛型类型时,泛型类型实际上就是 `Object`: // 编译器警告: List list = new ArrayLi 男娘i/ 2024年03月02日 10:09/ 0 赞/ 19 阅读
相关 Java泛型详解:Java泛型集合、泛型类、泛型方法、泛型的使用 在 [Java][] 1.5 之前没有泛型,通常需要使用强制类型转换的方式将一种数据类型转换为另一种数据类型,这种转换要求开发者对实际参数的类型具有可预知性。对于强制类型转换错 小鱼儿/ 2021年12月17日 16:35/ 0 赞/ 628 阅读
相关 Java泛型的使用场景 一、泛型概括 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数的方式传递,类似于方法中的变量参数。可以用在类、接口、方法的创建中,分别简 深藏阁楼爱情的钟/ 2021年11月11日 20:06/ 0 赞/ 229 阅读
还没有评论,来说两句吧...