Java基础“泛型”

  什么是泛型?

  泛型实现了参数化类型的概念,使代码可以应用于多种类型。泛型最初的目的是希望类或方法能够具备最广泛的表达能力。它是通过解耦类或方法,与使用的类型之间的约束来实现。

  一般类和方法只能使用具体类型来表示成员,要么就编写可以应用与多种类型的代码,这种方式对代码的束缚会很大,使用泛型能够很好的解决这个问题。

  泛型的简单使用:

    使用泛型一般在类名之前或接口名之前定义“<T>”;其中“<>”是固定的语法,“<....>”里可以有多个泛化的类型,类型的定义一般用大写的字母定义。

    

 

  对于Java容器类,泛型的使用必不可少,因为容器类存储的元素不可能是定制化的,为某一个对象或者某一个具体的继承链;可能有人说,用Object做为容器成员来实现不同元素的存储。这样是可以,但是用Object存储,是属于“向上转型”;当你要得到具体类型时,需要“向下转型”,这个是不安全的。容器是存储某一类型的集合,当存储时,是固定了存储哪种类型的数据,用Object存储,没有办法判断存储的类型是不是指定存储类型,编译时不会有任何提示。

  泛型的使用能够让类得到最广泛的使用场景,同时也指定了类的具体类型,这是它最大的好处。

  在泛型表达式里定义多个对象,被称为“元组”。它是将多个对象封装在一个单一的对象中。元组的定义保持了元素的次序,比如"<A,B,C>"。

  泛型方法:

  泛型在方法中使用。需要注意,基本类型是无法作为泛化的参数类型。之所以能用,是因为在Java SE5之后具备了自动打包和拆包的功能。方法使用泛型可以作为参数和返回值使用,泛型方法的使用与其所在的类是不是泛型没有关系,也就是说方法可以自己定义泛型并使用的。泛型方法的使用能够独立于类而产生变化,如果因为类型原因方法无法进行多元化,从而只能添加扩展,这种行为不是一个好的解决方式。如果是static方法,是无法访问泛型类的泛型参数的,static方法要使用泛型参数,必须成为泛型方法。

  我们来看一个例子:

 

 

从这个例子中我们发现,它们是相等的,为什么相等呢?这里有一个擦除机制,Java中的泛型是使用擦除来实现的。在使用泛型时,任何具体的类型信息都会被擦除,你唯一知道的就是你在使用一个对象,因此List<String>和List<Integer>在运行时事实上是相同类型,这两种形式都被擦除成“原生”类型。从这个例子的输出可以看出来,在泛型代码内部,是无法获得任何有关泛型参数类型的信息。

  

  

在泛型代码里无法获取到泛型对象的信息,自然也就无法使用对象的一些动作。要想使用对象的一些属性和动作,需要使用泛型边界 extends 关键字“<? extends Object>”。泛型类型参数会擦除到它的第一个边界,它会把参数类型替换为擦除类型,就像Object 替换了原生类型。

 

转载于:https://www.cnblogs.com/liaobudao/p/11273014.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值