泛型generics

 

 

泛型:JDK1.5版本之后出现的新特性,用于解决安全问题,是一个安全机制;

 

好处:

(1)将运行时期出现的问题classcastexcption,转移到了编译时期,方便程序员解决问题,让运行时期问题减少,安全;

(2)避免了强制转换的麻烦;

 

泛型格式:通过<>来定义要操作的引用数据类型;

在使用Java提供的对象时,什么时候使用泛型呢?

 

通常在集合框架中很常见;只要见到<>就要定义泛型;

 

其实<>就是用来接受类型的;当使用集合时,将集合中要存储的数据类型作为参数传递到<>即可;这类型只适用引用数据类型;

 

自定义泛型:

 

什么时候定义泛型类;

当类中要操作的引用数据类型不确定的时候,早起定义Object来完成扩展,现在定义泛型来完成扩展;

 

格式是class Demo<T>,在类名的后面加一个泛型表达形式,类里面的代码块都可以灵活换类型;

 

泛型除了可以定义在类上,还可以定义在方法上;

 

泛型类定义的泛型,在整个类中有效,如果被方法使用,泛型类的对象在明确要操作的具体类型后,所有的方法要操作的类型就已经固定了;

 

为了让不同方法可以操作不同类型,而且类型还不确定,可以将泛型定义在方法上;

格式:在方法的返回值类型前面修饰符后面加一泛型符号,表示参数的类型;

public <T>void method(T  t)  直接输入什么类型就操作什么类型,就像是Object类型一样;

 

当然,也可以同时把泛型同时定义在类中和方法中;这样,方法里的泛型就不随类来变化;

 

特殊之处:静态方法不可以访问类上定义的泛型;,如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上;因为静态是先加载,后创建类对象,不可能还要等对象建立了,才确定参数类型,没有参数类型的方法就是无效的了;因此,泛型是不能定义在类中;

 

泛型也是可以定义在接口上的;

 

我们为了使用任意类型的对象时,我们可以使用一个类型的通配符形式<?>;表示接受的类型不确定;可以直接定义在类型后面加一个泛型表示即可;

如果不用<?>而用<T>那么在类中就可以直接用t来表示某种类型直接定义类型,而<?>不行;

还要注意一点,因为<?>表示类型不确定,所以他后面的变量不能用具体的某种类型的特有方法,只能用Object的公有方法;在15-12视频7min;

 

在定义泛型时要注意,泛型不适用于多态;必须左右两边一致;

 

要想使用多态,可以用泛型限定

<? extends  父类>  泛型限定;

 

?通配符,或者占位符;

泛型的限定:<? extends E >表示可以接受E类型或者E的子类型,上限;

                            <? superE  >表示可以接受E类型或者E的父类型;

 

 

表示实际传入的类型必须要是泛型里面的子类型,即泛型里面可以声明为实际传入的父类也可以;上面的也同理;

在泛型中,不可以出现 Parent stu =  new  Student(); 15-12视频12min

但是可以在类上定义父类泛型,然后在类里面直接引入子类对象参数是可以的;只是创建对象和集合时要注意;15-12视频23min,因为里面只能用的是父类的方法,不能用子类的方法 貌似矛盾了;15-13视频10分钟;

自己验证一下;

 

泛型的高级应用;泛型限定是用于泛型扩展来用的;

 

泛型的更高级引用 泛型的组合应用  没讲;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值