java的泛型有哪些_java泛型

1.什么是泛型?

一种安全地扩展程序适用范围的方式,可以避免强制类型转化产生的异常。

2.泛型的定义

定义在类层次上,在整个类范围内有效:

public class ClassName

定义在成员方法上:

public viod doSome(arg...)

定义在静态方法

public static void doSome(arg...)

泛型定义成员方法或者静态方法上只在方法范围内有效。

3.限制泛型可用型

class ClassName:用在泛型类定义时,向下限制泛型只接受anyClass类及其子类。

GenericType super anyClass>:用在泛型使用时,向上限制泛型只接受anyClass及其父类,通常用作方法的形参。

GenericType extends anyClass>:用在泛型使用时,向下限制泛型只能接受anyClass及其子类,通常用作方法的形参。

4.泛型擦除机制

java中的泛型信息只存在于编译阶段,编译完成后,在字节码中与运行期间被擦除,只保留定义时的原始类型。

public void listMethod(ListstringList) {

}public void listMethod(ListintList) {

}

以上两个方法,按照重载原理,方法名相同,参数类型不同,允许出现。由于泛型擦除机制,泛型List在字节码与运行期间擦除了泛型信息,变成原始类型,那么这两个在定义时参数类型不同的方法就变成了完全相同的两个方法,编译无法通过。

5.泛型使用限制

⑴静态变量与静态方法

e69be227988d8e52a5d7d1d0039b060e.png

静态变量不可以被定义为泛型类声明的泛型,静态方法中不可以出现泛型类声明的泛型,因为泛型类声明的泛型需要在对象创建时指定具体类型,而访问静态变量或者静态方式时,不需要创建对象,就不能指定泛型的具体类型。

public class TempTest{

public static voiddoSome01(K t) {

}}

静态方法自身可以定义泛型,在调用时指定具体类型即可。之所以静态方法能接受自身定义的泛型,不能接受泛型类定义的泛型,关键在于静态方法在调用时能够为自身泛型指定类型,不能为泛型类声明的泛型指定具体类型。

也可以这样理解,静态变量和静态方法为所有对象所共享,如果采用泛型类定义的泛型,每一个对象创建时都指定一个类型,那么静态变量和静态方法到底采用哪一种类型呢?无论采用哪一种类型,都违背了共享的设计目的。

⑵继承

B是A的子类并不意味着List是List的子类型,List与List

⑶Object与原始类型

List不同于List(List>),List无法接受List类型对象,而List原始类型可以。

⑷数组

数组不可以采用泛型定义,即不可以采用"T[] arr=new T[10]"的形式定义数组。

参考:

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值