Java中泛型小总结

来源:互联网 发布:app软件大全 编辑:程序博客网 时间:2024/04/30 11:22


Java中泛型小总结

泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。

我们最常用的,也是最基本的就是泛型接口和泛型类,也就是我们平时在使用容器的时候所使用的泛型,再有就是泛型方法,使用通配符的上限和类型通配的下限等,下面会进行一定的说明;


泛型类和泛型接口:

泛型类和泛型接口允许右定义类或接口时使用类型形参,这个类型形参将在声明变量、创建对象时动态地指定一些对象的类型。

多说无益,上代码,一看就明白最后有代码。


泛型方法:

在定义接口和类时可以使用类型形参,在该类和接口的方法定义和成员定义中这些类型形参可被当成普通的类型来使用,这些上面已经说过,现在要说的是在定义类和接口时没有使用类型形参,在定义方法时仍可以自己定义类型形参,而这就是泛型方法。

使用方法看代码,见最后。


类型通配符:

前面说过类型形参了,但是,我们在使用中会遇到问题,如果将带有类型参数的对象传递给一个方法,我们应该怎么接收呢?

说到这里插入一条说明,一条极重要的说明:在使用泛型时候不能理所应当地使用类型参数的继承关系。比如:在定义为List<String> list = new ArrayList<String>();list中加入Object对象会报出错误,即,使用list.add(new Object());时会出错,是不能正常编译的。

而这时就要使用类型通配符了,怎么使用还是看代码:

使用这种通配符是不能对这个list进行增删的,如果进行操作,将抛出异常

 

通配符的上下限:

在通配符的基础之上我们还可以对类型进行限制,比如将传入的list内容纳的元素类型限制到A,我们应该使用类似于

         publicstatic void testS (List<? extends A> list) 的方法进行声名。

同理,在上面接口和类的类型形参中,我们也可以使用类似的类型上限对类型进行限定。

这时就有个问题了,类型通配符与泛型方法好像是一样一样的,我们怎么区分呢:

G?

书上的话,觉得还可以。

类型上限使用<? super A>,就不在这里浪费时间了。

代码示例:

import java.util.ArrayList;import java.util.List;public class TestGenericity {public static void main(String[] args) {//使用了泛型的类的使用TC<String> tc = new TC<String>("abc");System.out.println(tc.getT());//abc//使用泛型方法的示例TM tm = new TM();String a = tm.getSelf("123");System.out.println(a.getClass() + ":" + a);//class java.lang.String:123//b为基本类型int b = tm.getSelf(123);System.out.println(b);//123//类型通配符使用List<String> list1 = new ArrayList<String>();list1.add("aaa");list1.add("bbb");list1.add("ccc");List<Integer> list2 = new ArrayList<Integer>();list2.add(111);list2.add(222);list2.add(333);testS(list1);//输出,aaa\nbbb\nccctestS(list2);//输出,111\n222\n333}//使用通配符的方法,可以接收容纳任何类型的的List,进行遍历输出public static void testS (List<?> list) {for (int i=0; i < list.size(); i++) {System.out.println(list.get(i));}//错误,不能进行操作//list.add(new Object);}}//使用了泛型的接口interface TG<T> {public T getT();}//使用了泛型的类class TC<T> implements TG<T>{T t;public TC(T t) {super();this.t = t;}@Overridepublic T getT() {return t;}public void setT(T t) {this.t = t;}}class TM {//可以将任意伟入的类型再传出去public <T> T getSelf(T t) {return t;}}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 唯品金融没还款怎么办 金点原子锁打不开了怎么办 87彩店注册不了怎么办 微店如果不退款怎么办 微信上微商被骗怎么办 微商代理不做了怎么办 微店拒收不退款怎么办 在微商买东西被骗怎么办 云集买家买东西不退款怎么办 微信红包密码忘记了怎么办 微信购物不退货怎么办 微信隐私设置无法添加怎么办 微信支付被限额怎么办 微信发现没有购物怎么办 微信转账钱被骗怎么办 玩连环夺宝输了好多钱怎么办 厘米秀换不了装怎么办 社保只缴纳两年怎么办 502盖子粘到手上怎么办 口红粘在盖子上怎么办 玫瑰手杖永久错过了怎么办 手指沾到502胶水怎么办 我退款了货到了怎么办 世纪天成账号被盗什么也没绑怎么办 韩国电话卡不想用怎么办2018 汽车没有年检交警抓到怎么办 ios软件未受信任怎么办 淘宝开店被管理了怎么办 微店网络异常025怎么办 商家给买家返款转错了怎么办 淘宝号限制下单怎么办 淘宝退货单号填错了怎么办 淘宝买家申请退款不退货怎么办 不支持7天无理由怎么办 淘宝上不给退货怎么办 网购衣服买小了怎么办 淘宝上全球购买到假货怎么办 京东全球购税费怎么办 代购被海关税了怎么办 网上买猫被骗了怎么办 苏宁账号被冻结怎么办