- 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中做不到添加元素,诚然这么理解了,个人以为。
- 希望哪位同样能给出答案,先谢谢了
- */
复制代码 |