Java泛型的理解和用法

泛型的由来:

    在java开发中,泛型和集合框架结合起来创建对象会比较的常用。泛型是指参数化类型的能力,它可以定义类,方法,接口等。随后在编译的过程中,由编译器自动的转换成具体的类型替换它。
    之所以使用泛型是因为早期的泛型是Object来使用得,但是在实际的使用时,在类型的转换上存在隐患。比如我们定义了一个Object,实例的时候将它转换成String,但是在接收的时候我们又接受为int型,这样在程序的代码片中是不会报错的,但是在执行的过程中就会报错。所以java提供泛型来解决安全问题。

泛型的使用:
1.定义泛型类

public class Toll<E>{

    }

2.定义泛型类中泛型方法

public class Toll<E>{

        private E e;

        public E getE(){
            return e;
        }

        public void setE(E e){
            this.e = e;
        }
    }

这里的泛型类中的泛型必须和类定义的泛型保持一致,如果不一致则需要在方法中定义自己泛型

        public<T> void show(T t){
            System.out.println(t);
        }

3.泛型接口的使用

    interface Inter<T>{
        public void show(T t);
    }

4.泛型通配符?

  1. 非受限统配类型 ?表示任何一种对象类型 ,等价于? extends Object。
  2. 受限通配类型 ? extends T ,表示T或T的一个未知子类型。
  3. 下限通配 ?super T,表示T或T的一个父类型。

利用泛型自定义栈

/**
 1. 
 2. @author hp
 3. 创建一个空栈
 4. @param <E>
 */
public class GenericStack<E> {
    private ArrayList<E> list = new ArrayList<>();
    public GenericStack() {
    }
    /*
     * 栈的元素个数
     */
    public int getSize(){
        return list.size();
    }
    /*
     * 返回栈顶元素
     */
    public E peek(){
        return list.get(getSize()-1);
    }
    /*
     * 向栈的顶端添加一个元素
     */
    public void push(E o){
        list.add(o);
    }
    /*
     * 弹出栈顶元素并删除这个元素
     */
    public E pop(){
        E o = list.get(getSize()-1);
        list.remove(getSize()-1);
        return o;
    }
    public boolean isEmpty(){
        return list.isEmpty();
    }
}

注:!!!

  1. 泛型不能使用new E(),不能使用泛型类型参数创建对象。
  2. 不能使用new E[],不能使用泛型创建数组
  3. 在静态方法中不允许类的参数是泛型类型
  4. 异常类不能是泛型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值