Java中泛型的应用示例

本文深入探讨了Java中的泛型特性,包括泛型的基本概念、自定义泛型、泛型约束、泛型方法以及泛型在继承中的应用。通过示例展示了如何使用泛型提高代码的类型安全性和复用性,同时讲解了如何在实际编程中利用泛型进行高效的数据操作。
摘要由CSDN通过智能技术生成
public class GenericityTest {

    java.util.ArrayList arr;

    /*泛型 JDK 5引入
    * 适用于多种类型执行同一代码
    * 在使用前就可以确定参数类型,不需要转换,通常运用最广泛的是集合中
    * 指定泛型参数,就可以统一集合元素类型,使得存取更加便捷*/

    /*自定义泛型
    * 泛型参数名称可以任意
    * 通常使用的有:T Type,E Element,K Key,V Value,*/
    class ArrayList<E> {
        /*当指定了泛型参数时,此属性类型也随之确定下来
        * 要注意,泛型类型作为属性出现时不能被final修饰*/
        private E element;
        private int size;
        private Object[] elements;


        public ArrayList(){
            elements = new Object[10];
        }

        public ArrayList(int length){
            elements = new Object[length];
        }

        /*可以在方法中应用泛型参数*/
        public void add(E e){
            if(size>=elements.length){
                /*扩容*/
            }
            elements[size++] = e;
        }
    }

    /*泛型的约束*/

    /*自定义泛型方法
    * 此时要求此泛型参数必须实现Serializable接口
    * 该泛型仅对当前方法产生作用*/
    public <T extends Serializable> String getType(T t){
        return t.getClass().getName();
    }

    /*泛型的继承*/
    class SuperClass<K,V> {}

    /*全部继承*/
    class Extend<K,V> extends SuperClass<K,V>{}

    /*选择继承部分或可以不继承*/
    class Extend1<V> extends SuperClass<String,V>{}

    /*不确定泛型*/
    /*使用 ? 来表示一个未知类型,可以使用约束限制其范围
    * 比如以下示例,将传入的运行时类所对应的基础类类型限制为SuperClass
    * 或者是其一个子类*/
    public SuperClass getSuperClass(Class<? extends SuperClass> t) {
        SuperClass superClass = null;
        try {
             superClass = t.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return superClass;
    }

    /*示例,要求传递的参数需为SuperClass或其子类的运行时类
    * 返回该运行时类对应基础类的实例*/
    public <T extends SuperClass> T get(Class<T> tClass) throws IllegalAccessException, InstantiationException {
        return tClass.newInstance();
    }

    /*示例,要求传递一个任意泛型类型的运行时类,返回该运行时类的基础类实例*/
    public <T> T getT(Class<T> tClass) throws IllegalAccessException, InstantiationException {
        return tClass.newInstance();

        /*Spring中getBean(Class<T> aClass)方法就是靠这种方式来
        完成获取容器中的组件而又无需强转类型的效果。即返回值类型是可变的,取决于传递的参数*/
    }
}    

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值