java的泛型回顾

来源:互联网 发布:c语言选择结构编程题 编辑:程序博客网 时间:2024/05/22 00:39

前言

这边博文例子是自己测试并整理的,有点凌乱,但是耐心看下去还是能对泛型略知一二的。具体详细的泛型介绍有一篇写的很好的博客:

——————此处传送门——————

几个常见的符号

遇到一些泛型的代码,经常见到这几个符号,一开始学的时候也是糊里糊涂。

  • E:Element,表示集合中的元素
  • T:Type(Java类)
  • K:key(键)
  • V:value(值)
  • N:number(数值类型)
  • ?:表示不确定的数值类型

小例子

package genericity;import java.util.ArrayList;import java.util.Collection;import java.util.LinkedList;import java.util.List;public class TestGenericity {    private String s = "this is string...";    public static void main(String[] args) {        //测试        One<? extends List> one = new One<ArrayList>();//正确        /*         * class Two<T extends Collection<? extends List>>         * */        //Two<List> two = new Two<List>();报错        Two<Collection<List>> two = new Two<Collection<List>>();//正确        Two<List<ArrayList<String>>> two2 = new Two<List<ArrayList<String>>>();//正确        Two<LinkedList<ArrayList<String>>> two3 = new Two<LinkedList<ArrayList<String>>>();//正确//      Two<LinkedList<Collection>> two4 = new Two<LinkedList<Collection>>();//报错,超过上限        /**         * class Three<T extends Collection<? super ArrayList>>         * */        Three<List<ArrayList>> t1 = new Three<List<ArrayList>>();//正确        Three<ArrayList<ArrayList>> t2 = new Three<ArrayList<ArrayList>>();//正确        Three<ArrayList<List>> t3 = new Three<ArrayList<List>>();//正确        //因为超过了下线ArrayList,所以会报错//      Three<ArrayList<SonOfArrayList<String>>> t4 = new Three<ArrayList<SonOfArrayList<String>>>();//正确        /*         * 测试T和Class<T>区别:         * 1. T:表示具体的对象         * 2. Class<T>:表示该T对象的类型,如果T是String则返回         *    的是Class.newInstence就是String类型的         * */        System.out.println("1:"+String.class);//class java.lang.String        System.out.println("2:"+String.class.getName());//java.lang.String        System.out.println("3:"+one.getType(String.class));//java.lang.Class        String str = new String("asd");//      System.out.println(str);//会报错,把Class<T>改为T后正确        String str2 = one.getType(str.getClass());        System.out.println("4:"+str2.toString());//java.lang.Class        try {            //得到实例str2.getClass().newInstance();获得一个String类型的对象            //5:java.lang.String            System.out.println("5:"+str2.getClass().newInstance().getClass().getName());        } catch (InstantiationException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IllegalAccessException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }//      str2=123;//报错        System.out.println("6:"+str2.getClass().getName());//java.lang.String    }}/*  * 此处的 T 为类型实参,表示T类型是Collection的子类  * */class One<T extends Collection>{    /* 泛型方法示例      * @param <T extends Object>:指明T的类型      * @param T:返回值的类型      * @param Class<T>:表示泛型T的具体类型      * @param c:用来创建T代表的类的对象       * */    protected <T extends Object> T getType(Class<T> clazz){        return (T) clazz.getClass().getName();          }}/*  ?表示有限制的通配符,表示不确定的类型 *  extends:确定泛型的上限 * */class Two<T extends Collection<? extends List>>{}/* * super确定了泛型的下限 * */class Three<T extends Collection<? super ArrayList>>{}//ArrayList的子类class SonOfArrayList<E> extends ArrayList<E>{}
0 0
原创粉丝点击