泛型的高级用法

package T;

public class 泛型的高级用法 {

    /**
     * 泛型的高级用法
     *泛型的高级用法包括限制泛型可用类型和使用类型通配符等。
     *1.限制泛型可用类型
     *默认可以使用任何类型来实例化一个泛型类对象,但java中对泛型类实例的类型作了限制
     *Class 类名称<T extends anyClass>
     *anyClass指某个接口或类
     *使用泛型限制后,泛型类的类型必须实现或继承anyClass这个接口或类。
     *无论anyClass是接口还是类,在进行泛型限制时都必须使用extends关键字
     * 2.使用类型通配符
     * 在泛型机制中,提供类型通配符,其主要作用是在创建一个泛型类对象时限制这个泛型类的类型
     * 实现或继承某个接口或类的子类。
     * 要声明一个对象可以使用“?”通配符来表示,同时使用extends关键字来对泛型加以限制
     * 使用泛型类型通配符的用法:
     * 泛型类型名称<? extends List> a=null;
     * 其中,<? extends List>表示类型未知,当需要使用泛型对象时,可以单独实例化
     *
     *
     * 在项目中创建一个类文件,在该类中限制泛型类型
     * A<? extends List> a=null;
     * a=new A<ArrayList>();
     * a=new A<ArrayList>();
     *
     * 除了可以实例化一个限制泛型类型的实例之外,还可以将该实例放置在方法的参数中
     *
     * 在项目中创建一个类文件,在该类中的方法参数中使用匹配字符串
     * public void doSomething(A<? extends List>a){
     * }
     *
     * 在泛型中使用通配符形式
     * List<String> l1=new ArrayList<String>();//实例化一个ArrayList对象
     * l1.add("成员");//在集合中添加内容
     * List<?> l2=l1;//使用通配符
     * List<?> l3=new LinkedList<Integer>();
     * System.out.println(l2.get(0));
     *
     *
     * 泛型类型限制除了可以向下限制之外,还可以进行向上限制,
     * 只要在定义时使用super关键字即可。
     * 例如:A<? super List> a=null;
     * 这样定义后,对象只接受List接口或上层父类类型,如a=new A<Object>();
     *
     *
     * 3.继承泛型类与实现泛型接口
     * 定义为泛型的类和接口也可以被继承与实现。
     *
     * public class ExtendClass<T1>{
     * }
     * class SubClass<T1,T2,T3> extends ExtendClass<T1>{
     * }
     * 如果在SubClass类继承ExtendClass类时保留父类的泛型类型,需要在继承时指明,如果没有指明,直接
     * 使用extends ExtendClass语句及新型继承操作,则SubClass类中T1,T2,T3都会自动变为Object,所以
     * 在一般情况下将父类的泛型类型保留
     *
     * 定义泛型接口也可以被实现
     * interface i<T1>{
     *
     * }
     * class SubClass2<TR1,T2,T3>implements i<T1>{
     * }
     *
     * 泛型总结
     * 泛型的类型参数只能是类类型,不可以使简单类型。
     * 泛型的类型个数可以是多个
     * 可以使用extends关键字限制泛型的类型
     * 可以使用通配符限制泛型的类型
     *
     */
    public static void main(String[] args) {
        
    }

}

猜你喜欢

转载自blog.csdn.net/qq_41978199/article/details/80710073
今日推荐