java中的泛型类

一.什么是泛型?

泛型能够代表一切类型

二.泛型的意义

假如现在有一个数组,我们需要往里面存入了很多元素,有String类型,有自定义类型等等;假以时日,我们在需要的时候还会再将它们从容器中取出来,如果把它们都存放在一个数组中,我们存取的时候,会显得比较混乱。此外还有一个最关键的点,如果我们不使用泛型,那么我们存入到数组中的对象会被统一当作 Object 类进行处理,在取出的时候,就不能使用我们存入时的类型特有的方法,要进行强转,这样会非常麻烦。

那么我们能不能对数组进行分类呢?有些数组只存String类型的数据,有些数组只存自定义类型的数据,这样我们不管是存还是取的时候,都会比较清晰。

既然有了目标,我们再来说方法,怎么样才能对数组进行分类的?

这就要说到我们今天要讲的泛型。

例:
实现存储数据类型是String的栈

StringStack类:

public class StringStack {
    //定义数组
    private String[] arr;
    private int i=-1;//游标
    public StringStack(int size){
        arr=new String[size];
    }
 
    //添加数据(入栈)
    public void add(String value){
        i++;
        arr[i]=value;
    }
 
    //出栈(输出)
    public String get(){
        return arr[i--];
    }
}

Test类:

public class Test {
    public static void main(String[] args) {
        StringStack stringStack=new StringStack(4);
        stringStack.add("张三");
        stringStack.add("李四");
        stringStack.add("王五");
        System.out.println(stringStack.get());
        System.out.println(stringStack.get());
        System.out.println(stringStack.get());
    }
} 

输出:
在这里插入图片描述

三.泛型定义方法

泛型的格式为 <数据类型>
定义方法:class ClassName {…} (<>里写什么都行)

				T:创建对象的时候里面具体指定的数据类型

使用:类名 对象名=new 类名();
在上述语法中,ClassName是泛型类的名称,T是类型参数的占位符,可以是任何合法的标识符,表示在使用泛型时所代表的具体类型。在泛型类中,可以使用类型参数 T 来声明成员变量、方法参数、方法返回类型等,从而使这些成员具有通用性,可以适用于不同类型的数据。

例:
实现存储类型为泛型的栈

Stack类:

public class Stack<hh> {
    //定义数组
    private hh[] arr;
    private int i=-1;//游标
    public Stack(int size){
        arr=(hh[]) new Object[size];//强转
    }
 
    //添加数据(入栈)
    public void add(hh value){
        i++;
        arr[i]=value;
    }
 
    //出栈(输出)
    public hh get(){
        return arr[i--];
  	  }
    }

Test类:


public class Test {
    public static void main(String[] args) {
        Stack stack=new Stack(6);
        stack.add(1);
        stack.add(2);
        stack.add(3);
        stack.add("张三");
        System.out.println(stack.get());
        System.out.println(stack.get());
        System.out.println(stack.get());
        System.out.println(stack.get());
    }
}

输出:
在这里插入图片描述

发现不是同一类型的数据都被存储并打印输出了

四.抽象案例

public class ProductGetter <T>{
    //奖金或奖品
    private T product;
 
    //奖品、奖金池
    ArrayList<T> arrayList=new ArrayList<>();
 
    //添加奖品到奖品池
    public void add(T t){
        arrayList.add(t);
    }
 
    //定义一个随机数,用来抽选奖品
    Random random=new Random();
 
    //抽奖
    public T get(){
        product=arrayList.get(random.nextInt(arrayList.size()));
        return product;
   		}
    }

public class Test {
    public static void main(String[] args) {
        ProductGetter productGetter=new ProductGetter();
        String[] strPro={"手机","平板","电脑","键盘"};
 
        //将奖品放入奖金池
        for(int i=0;i<strPro.length;i++){
            productGetter.add(strPro[i]);
        }
 
        String product= (String) productGetter.get();
        System.out.println("恭喜您抽中了"+product);
 
        System.out.println("-------------------------------------------");
        ProductGetter<Integer> productGetter1=new ProductGetter<>();
        Integer[] intPro={100,1000,10000,20000};
        for(int i=0;i<intPro.length;i++){
            productGetter1.add(intPro[i]);
        }
        Integer product1=productGetter1.get();
        System.out.println("恭喜您,抽中了"+product1+"元");
    }
}

输出:
在这里插入图片描述

五.泛型特点

1.泛型类如果没有指定具体的数据类型,就是Object
2.泛型的类型参数只能是类 类型,不能是基本数据类型
3.泛型类型在逻辑上可以看成是多个不同的类型,但实际上是相同类型

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值