A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 佘天宇 中级黑马   /  2012-10-6 12:41  /  1266 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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



*/

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马