- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Day18总结
泛型类:
在写容器之前想要容器中要存什么?所以要先写好泛型
Eg:TreeSetPerson ts=new TreeSetPerson();
有了泛型后强制转换就没有用
Eg:public class Person implements ComparatorPerson{}
对于下面覆盖的它的compare方法就不用强制转换了。
Public int compare(Person p){}这里就不用在做强制转换了。
实现代码:
Public static void main(String[] args){
Tool t=new Tool();
t.setObject(new Cat());
t.setObject(new Dog());这时编译会出现没问题,但是运行时会出现错误,因为发生了类型转换异常,dog不能转换成Cat。
Cat c=(Cat)t.getObject();
ToolCat t=new ToolCat();
t.setObject(new Cat());此时就不用强转了
t.setObject(new Dog()):此时编译就失败,把运行时的异常转到编译时候。
}
Class Cat{}
Class Dog{}
/*
Class Tool{
Private Object obj;
Public void setObject(Object obj){
This.obj=obj;
}
Public Object getObject(){
Return obj;
}
}
*/
改进后
Class ToolT{
Private T t;
Public void setObject(T t){
This.t=t;
}
Public T getObject(){
Return t;
}
}
总结:这就是将泛型定义在类上,这个类称为泛型类,是一种替代Object类的一种技术,因为Object类有自动类型提升和转换,泛型已经替代它做了,编译时期更安全,省去了强转的麻烦。
什么时候使用泛型类?当类中要操作的引用数据类型不确定的时候,以前使用的是共性类型Object现在可以使用泛型来解决,比Object更为安全。
泛型方法:既然类中的方法操作类型不确定,其实可以将泛型定义在方法上。
实现代码:
ToolString t=new Tool2String();
T.show(new Integer(5));编译失败,因为类型不一致。
Tool2Integer t1=new Tool2Integer();这样便可以操作Integer类型的对象了。
T.show();
Class Tool2T{
显示对象的打印结构,可是对象不确定,所以使用Object,而现在可以使用泛型解决。
Wvoid show(W obj){
Sop(obj);
}
当静态方法的时候,如果方法是静态的是无法访问类上定义的泛型的,如果该方法还需要泛型,必须将泛型定义在方法上,
Static Y void staticMethod(Y t){}
泛型定义在方法上时只能放在返回值的前面和修饰符的后面
}
什么时候使用泛型方法?当方法操作的引用数据类型不确定的时候就使用方法。
泛型接口:
实现代码:
Interface InterT{ void show(T t);
}
Class InterImpl implements InterString{
Public void show(String str){
Sop(str);
}
}
不明确的时候用上面这种,但是当我们明确了类型时候使用下面的这种情况
Class InterImplW implements Interw{
Public void show(W w){}
}
Public static void main(String[] args){
New InterImpl().show(hehe);
}
泛型通配符:不带泛型也是可以的,因为新的可以兼容前面的,因为泛型擦除之后它还是Object注意区分T t代表某一种
实现代码:
Public static void main(String[] args){
ArrayListStudent al=new ArrayListStudent();
Al.add(new Student(lisi,21));
Al.add(new Student(lisi2,22));
Al.add(new Student(lisi3,23));
ArrayListWorker al2=new ArrayListWorker();
Al.add(new Student(lisiso,23));
Al.add(new Student(lisiss,23));
Al.
文档评论(0)