package cn.itcast.heima.technology;
import java.util.ArrayList;
import java.util.Collection;
public class ForGenericProblem {
public static void main(String[] args) {
Collection<String> scol=new ArrayList<String>();
scol.add("zhangsan");
scol.add("lisi");
scol.add("wangwu");
printCol1(scol);
System.out.println("----------------这是分割线----------------------------");
Collection<Integer> icol=new ArrayList<Integer>();
icol.add(121);
icol.add(2);
icol.add(4);
printCol2(icol);
}
//在定义方法的时候,方便接受任何参数化类型的集合,定义泛型
public static<T> void printCol1(Collection<T> col){
//在方法中想要集合中的元素进行操作,如添加元素,
//col.add(new T());//帮助理解,事实不可以,会报错
/*在这里 ,需要的参数起码可以知道接收T类型的对象时没问题的。知道具体的类型T,姑且这么说吧
而在下面使用通配符"?"的方法泛型方法中因为不知道匹配的是什么类型化的参数
不可能使用到和参数化的类型有关的方法,因为你不能肯定是什么类型*/
col.size();//方法中没有涉及到和类型有关的参数
for(T f:col){
System.out.println(f);
}
}
//这两种定义泛型的方法都是可以的,接受上面不同参数化 类型的集合
public static void printCol2(Collection<?> col){
col.add(null);
/*无论add方法传入什么参数,都是错误的,在方法中传入的参数
* 在使用通配符"?"的时候,不能调用任何与类型有关的方法
*/
System.out.println(col.size());
//无论什么类型的集合,都有方法size(),方法本身和类型无关
for(Object obj:col){
System.out.println(obj);
}
}
}
/*
在这里 ,
1,我提个问题,就是上的两个printCol2方法中,当时张老师说无论什么参数都不可以,但是
如果是传入null的话,好像不会报错,
希望在这里看了张老师视频 的,哪位能给个解释,
2,而且上面的解释中,在方法printCol1中做不到添加元素,诚然这么理解了,个人以为。
希望哪位同样能给出答案,先谢谢了
*/ |