不理解泛型的看进来,绝不后悔!!!

Java泛型

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

使用泛型可以避免了类型强转的麻烦

一、定义格式

修饰符 class 类名<代表泛型的变量> { }

二、集合中的泛型


//集合中的泛型
@Test
public void test_1(){
    //没有泛型限定的集合,里面可以存储任何类型的对象引用
    List list_1 = new ArrayList();
    //存储了不同类型的数据,遍历的时候会出错
    list_1.add("abc");
    list_1.add(123);
 
    //添加泛型的集合,里面只能存储泛型所限定类型的数据,保证了集合中数据类型的一致性和安全性
    //以下定义的集合只能存储String类型的数据
    List<String> list_2 = new ArrayList<String>();
    list_2.add("abc");
    //list_2.add(123);    这句代码编译会出错!!!


三、伪泛型

Java编译后的字节码文件中是没有泛型的,泛型是限定在编译的时候的安全机制,所以Java中的泛型称之为伪泛型。

四、泛型类、泛型方法

其实在上面集合演示的代码中,ArrayList就是一个泛型类,其定义如下:

public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, Serializable

以上类的定义中,就是泛型的限定,其中的字母E可以理解为一个变量,传过来什么类型,就是什么类型。

public class MyGenerics<E> {
 
    private E e;
    //泛型方法
    public void add(E e) {
        this.e = e;
    }
    //泛型方法
    public E get() {
        return e;
    }
 
}
class Test{
    public static void main(String[] args){
        MyGenerics<String> mg_1  = new MyGenerics<>();
        mg_1.add("abc");
        mg_1.add("cde");
        System.out.println(mg_1.get());
        //mg_1.add(123);   这句代吗编译错误
    }
}

五、泛型通配符

当使用泛型类或者接口时,传递的数据中,泛型类型不确定,可以通过通配符**<?>**表示。但是一旦使用泛型的通配
符后,只能使用Object类中的共性方法,集合中元素自身方法无法使用。

六、泛型限定

<? extends T>表示该通配符所代表的类型是T类型的子类。 <? super T>表示该通配符所代表的类型是T类型的父类。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值