泛型类的介绍

目录

一、什么是泛型

二、为什么要有泛型

1.实现存储数据类型是int的栈

Stack类

Test类

运行结果:

如果要存储String类型的数据,怎么办?

2.实现存储数据类型是String的栈

StringStack类

Test类

运行结果:

​如果我们还想存储别的类型的数据呢?

3.泛型

定义方法:class 类名 <T>{...}

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

使用:类名 对象名=new 类名();

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

Stack类

Test类

运行结果:

统一类型:

4.一个抽奖的小案例

三、泛型特点

1.泛型类如果没有指定具体的数据类型,就是Object

2.泛型的类型参数只能是类 类型,不能是基本数据类型

3.泛型类型在逻辑上可以看成是多个不同的类型,但实际上是相同类型


一、什么是泛型

泛型----能够代表一切类型

二、为什么要有泛型

从实现栈去解释为什么要有泛型

1.实现存储数据类型是int的栈

Stack类

public class Stack {
    //定义数组
    private int[] arr;
    private int i=-1;//游标
    public Stack(int size){
        arr=new int[size];
    }


    //添加数据(入栈)
    public void add(int value){
        i++;
        arr[i]=value;
    }

    //出栈(输出)
    public int 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(4);
        System.out.println(stack.get());
        System.out.println(stack.get());
        System.out.println(stack.get());
        System.out.println(stack.get());
    }
}

运行结果:

这个时候我们存储整数类型的数据是没问题的,但是如果要存储字符型或者浮点型或者其他类型的数据是不行的

如果要存储String类型的数据,怎么办?

把它的类型换成String类型的就行了:

2.实现存储数据类型是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());
    }
}

运行结果:

如果我们还想存储别的类型的数据呢?

那就需要再重新创建一个类,但是这样做很麻烦

这时候就可以使用泛型

3.泛型

定义方法:class 类名 <T>{...}

                  (<>里写什么都行)

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

使用:类名 对象名=new 类名();

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

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());
    }
}
运行结果:

 在这里我们想存储什么类型的数据都可以(但是最好是同一类型)

统一类型:

如果我们想统一类型的话,可以这样写:

Stack<Integer> stack=new Stack(6);

那这时候String类型的就会报错:

4.一个抽奖的小案例

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.泛型类型在逻辑上可以看成是多个不同的类型,但实际上是相同类型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值