泛型类的使用及自定义

首先,让我们来看看泛型类如何使用,使用泛型类有什么好处?

import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Vector;

public class google {
   
    public static void main(String[] args) throws Exception{
        // 泛型是给编译器看的,可以用反射透过泛型赋其他类型的值
        HashMap<String, Integer> maps = new HashMap<String, Integer>();
        maps.put("sad", 123);
        maps.put("saasdd", 12323);
        //通过反射对maps非法加入其它类型字符
        maps.getClass().getMethod("put", Object.class,Object.class).invoke(maps, "反射就是强大","成功了吧!");
        //遍历maps集合的值
        //利用自定义泛型类添加原属

        Set<Map.Entry<String,Integer>> entrySet = maps.entrySet();
        for(Map.Entry<String,Integer> m : entrySet){
            System.out.println(m.getKey() + ":" + m.getValue());
        }
        //调用通用泛型
        printHashMap(maps);
        //ClassLoader.class.getClassLoader().getClass();
        //自定义类加载器
        //类加载时,会先交给上一级,从上级开始往下进行加载


        Vector<Date> v = new Vector<Date>();
       
        /**
         * 我们则呢么得到泛型参数的类型呢,在这里我们可以吧泛型放到一个方法中
         * Java为我们提供的得到方法中的泛型的参数类型
         */
        Method applyMethod = google.class.getMethod("applyType", Vector.class);
        Type[] types = applyMethod.getGenericParameterTypes();
        ParameterizedType pType = (ParameterizedType)types[0];
        System.out.println(pType.getRawType());
        System.out.println(pType.getActualTypeArguments()[0]);

    }
    //(?)问号表示任意参数类型,是通配符
    //? extends Number向上限定符,不能超出Number包涵的类型
    //? super ?先下限定符

    public static void applyType(Vector<Date> value){
       
    }
   
    public static void printHashMap(HashMap<? ,? extends Number> maps){
        //在这里不能进行添加元素操作
        System.out.println(maps.size());
    }
   
    public static <T> void printHashMaps(HashMap<T ,T> maps,T key,T value){
        maps.put(key, value);
        System.out.println(maps.size());
    }
   
   
    //模板方法设计模式父类定义流程细节了类实现(此方法仅在C/C++中可应用,有余Java虚拟机的关系,这里无法实现)
    //这模板非常有用
    public static <T> T add(T x,T y){
        return null;
    }
}

 

下面我们自定义一个简单的泛型类

 

//自定义泛型类泛型 类
public class tobe<T> {
    public void add(){
       
    }
    public T find(int i){
        return null;
    }
    //静态方法在泛型类,中不受约束
    public static <E> E  add(E x){
        return null;
    }
    //通过反射拿到泛型里面参数的实际类型
   
    public void del(T i){
       
    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值