Java 泛型

泛型


1、  泛型概述

        泛型,即“参数化类型”。泛型的原理就是“类型参数化”,即把类型看做参数。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。而泛型就是把所要操作的类型看做参数,就像方法的形参,是运行时传递的值的占位符一样。


2、  为什么需要引入泛型?

        为什么需要引入泛型?举个例子:如果我们需要产生多个对象,每个对象的逻辑完全一样,但是对象内的成员变量的类型不同,那么要如何去做?

        如果没有泛型,那么可能有两种解决方式,一:创建多个类文件,给每个类中的成员变量设置指定的数据类型;二:创建一个类文件,给这个类中的成员变量设置Object数据类型。然而这两种方法都有其不足之处,方法一会导致类的膨胀,重用性太差;方法二编译时正常,但在运行时可能会出现错误。

        泛型解决了以上不足,它可以在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,同时使用多态还可以提高代码的扩展性和重用性。


3、  泛型的用法

        讲了泛型的概念和为什么引入,那么最重要的部分就要来了,那就是该如何使用它。


3.1、自定义泛型类

        

        自定义泛型类格式如上图所示,一般使用T、K、V等代表类型,图中age便是一个泛型参数,用T表示其类型,main中实例化时声明T的具体类型就可以为age赋值不同类型的数据。


3.1.1泛型类可以同时设置多个类型参数

        

        如图所示泛型类可以同时设置多个类型参数,中间用逗号隔开


3.1.2泛型类可以继承泛型类

        

        如图所示,泛型类可以继承泛型类,继承时参数可以不再使用父类的参数名,但是子类的参数名要与父类的参数名一一对应

例如:class Person<T,K>{}

class Teacher<M,N,V> extends Person<M,N>{}


3.1.3泛型类可以实现泛型接口

        

        如图所示,泛型类可以实现泛型接口,从而使用多态,减少代码量



3.1.4泛型类的类型参数可以是泛型

        

        

        如图所示,当没有指定泛型使用的类型或接口时,默认任何类型都可以作为参数传入




3.1.5、泛型类之限制泛型可用类型

        在定义泛型类别时,默认在实例化泛型类的时候可以使用任何类型,如果想要限制使用泛型类型时,只能用某个特定类型或者其之诶新才能实例化该类型时,可以在定义类型时,只用extends关键字指定这个类型必须是继承某个类,或者实现某个接口。

        以下是继承类的,接口原理一样

        



3.2、泛型方法

        不仅类可以声明泛型,类中的方法也可以声明仅用于自身的泛型。当添加的类型约束只作用于一个方法的多个参数之间,而不涉及到其他方法时,只需使用泛型方法即可。

        


3.3、类型通配符

        同一泛型类,如果实例化时给定的实际类型不同,则这些实例的类型时不兼容的,不能相互赋值,导致使用不便,为了解决这个问题,可以使用类型通配符(?)来声明泛型类的变量。


4、本文中的例子主要是为了阐述泛型中的一些思想而简单举出的,并不一定有着实际的可用性。另外,一提到泛型,相信大家用到最多的就是在集合中,其实,在实际的编程过程中,自己可以使用泛型去简化开发,且能很好的保证代码质量。并且还要注意的一点是,Java中没有所谓的泛型数组一说。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值