Java基础知识整理13

泛型
泛型了解:Java集合没有很好的通用性,所以带来了两个问题。
1. 集合对元素类型没有任何限制,这将可能引发一些问题。
2. 由于把对象“丢进”集合时,集合丢失了对象的状态信息,集合只知道它装的是Object类型,因此取出集合元素时还需要进行强制类型转换。这种强制类型转换既会增加变成的复杂度,也可能引发ClassCastException.
使用泛型:
所谓泛型:就是允许在定义类,接口时指定类型形参,这个类型形参将在声明变量,创建对象时确定(即传入实际的类型参数,也可称为类型实参)。
改写后的List接口,Iterator接口,Map接口
在这里插入图片描述
泛型的实质:允许在定义接口,类时指定类型形参在整个接口,类体内中可以当成类型使用,几乎所有可使用其他普通类型的地方都可以使用这种形参。包含泛型声明的类型可以在定义变量,创建对象时传入一个类型的实参,从而可以动态生成无数多个逻辑上的子类,但这种子类在物理上并不存在。
在这里插入图片描述
当创建带泛型声明的自定义类,为该类定义构造器时,构造器还是原来的类名,不要增加泛型的声明。
从泛型类派生子类:
当创建带泛型声明的接口,父类之后,可以为该接口创建实现类,或从该父类派生子类,当使用这些接口,父类时不能再包含类型形参。
在这里插入图片描述
不管泛型类型的实际类型参数是什么,他们在运行时总有同样的类(class)
泛型对其所有可能的类型参数,都具有同样的行为,从而可以把相同的类当成许多不同的类处理。与此完全一致的是,类的静态变量和方法也在所有实例间共享,所以在静态方法,静态初始化或者静态变量的声明和初始化中不允许使用类型形参instanceof运算符后不能使用泛型类。
类型通配符:
如果Foo是Bar的子类型(子类或者子接口),而G是具有泛型声明的类或接口,那么G是G的子类型并不成立。
如果使用泛型,只要在编译时没有出现警告,就不会遇到运行时ClassCastException。
数组和泛型有所不同,假设Foo是Bar的一个子类型(子类或者子接口),那么Foo[]依然是Bar[]的子类型;但G不是G的子类型。
使用类型通配符:类型通配符一般是一个问号(?)将一个问号作为类型实参传给List集合,写作:List<?>(意思是一个未知元素的List),这个问号被称为通配符,他的元素类型可以匹配任何类型。但这种通配符的List仅表示它是各种泛型List的父类,并不能把元素加入到其中。
Null它是所有引用类型的实例。
设定指定类型通配符的上限:
当直接使用List<?>这种形式时,即表明这个List集合可以是任何泛型List的父类。但还有一种特殊的情形,我们不想这个List<?>是任何泛型List的父类,只想表示它是某一类泛型List的父类。
Java泛型提供了被限制的泛型通配符
List<?extends Shape>//表示所有的Shape泛型List的父类。
List<?extends Shape>是受限制通配符的一个例子,此处的问号代表一个未知类型Shape为这个通配符的上限。
设定类型形参的上限:
在这里插入图片描述
程序需要为类型形参设定多个上限(至多有一个父类上,可以有多个接口上限),表明该类型形参必须是其父类的子类(包括是父类的本身也行),并且有多个上限接口。
如果要为类型形参指定类上限,类上限必须位于第一位。
泛型方法:
就是在声明方法时定义一个或多个类型的形参,泛型方法的格式是:
修饰符<T,S>返回值类型 方法名(形参列表)
{
方法体;
}
泛型方法的方法签名比普通方法的方法签名多了类型形参声明,类型形参声明以尖括号括起来,多个类型形参之间用(,)隔开,所有类型形参的声明放在修饰符和方法返回值类型之间。

在这里插入图片描述
方法中的泛型参数无需显式传入实际类型参数
泛型方法和通配符的区别:
大多数时候都可以使用泛型方法来替代类型通配符,通配符就是被设计用来支持灵活子类化。泛型方法允许类型形参被用来表示一个或多个参数之间的类型依赖关系,或者方法返回值与参数之间的类型依赖关系。如果没有,不应该使用泛型方法。
如果某个方法中的形参(a)的类型或返回值类型都依赖于另一个形参(b)的类型,则形参(b)的类型声明不应该使用通配符——因为形参(a),或返回值的类型依赖于该形参(b)的类型,如果形参(b)的类型无法确定,程序无法定义形参(a)的类型。在这种情况下,只能考虑使用方法签名中声明类型形参。
类型通配符与显式声明类型形参有一个明显的区别:类型通配符既可以在方法签名中定义形参的类型,也可以定义变量的类型,但泛型中类型形参必须在对应方法中显式声明。
设定通配符的下限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值