泛型

来源:互联网 发布:必赢客软件 编辑:程序博客网 时间:2024/06/04 17:47

1.对于泛型类,不能在静态属性声明中使用类型形参,不能在静态方法声明中使用类型形参
2.如果FOO是bar的一个子类,而G是具有泛型声明的类或接口,那么FOO[]是bar[]的一个子类,但是G<FOO>是G<bar>的子类并不成立

3.程序可以调用get()方法来返回List<?>集合指定索引处的元素,其返回值是一个未知的类型,但是可以肯定的是:它总是一个Object
4.List<? extends shape>:(?)代表一个未知类型,但是该未知类型一定是shape类型的子类
5.不能把对象放入一个未知类型的集合中(比如List<?>)

6.泛型方法的两种使用

//import java.util.Object;import java.util.Collection;import java.util.ArrayList;import java.util.List;public class TestGenericMethod {static <T> void fromArrayToCollection(T[] a,Collection<T> c){for(T o:a){c.add(o);}}//必须保证传过来的参数类型一样static <T> void fromCollectionToCollection1(Collection<T> a,Collection<T> c){for(T o:a){c.add(o);}}//第一个参数:传过来的只要是T的子类就可以static <T> void fromCollectionToCollection2(Collection<? extends T> a,Collection<T> c){for(T o:a){c.add(o);}}public static void main(String[] args) {Object[] oa=new Object[1000];Collection<Object> co=new ArrayList<Object>();//T代表ObjectfromArrayToCollection(oa,co);String[] sa=new String[100];Collection<String> cs=new ArrayList<String>();//T代表StringfromArrayToCollection(sa,cs);//T代表Object,sa向上转型为ObjectfromArrayToCollection(sa,co);List<Object> ao=new ArrayList<Object>();List<String> as=new ArrayList<String>();//编译出现异常,sa无法进行向上转型//fromCollectionToCollection1(ao,as);fromCollectionToCollection2(as,ao);}}


import java.util.List;import java.util.ArrayList;import java.util.Collection;public class MyUtils {//第一个参数:必须是T的本身或是T的父类public static <T> T copy(Collection<? super T >dest,Collection<T> src){T last=null;for(T ele:src){last=ele;dest.add(ele);}return last;}public static void main(String[] args) {List<Number> ln=new ArrayList<Number>();List<Integer> li=new ArrayList<Integer>();li.add(5);Integer last=copy(ln,li);System.out.println(ln);}}






0 0
原创粉丝点击