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) {
}
}
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) {
}
}