黑马程序员技术交流社区

标题: 泛型(Generic) 求技术分 [打印本页]

作者: pzfpang449    时间: 2013-1-23 17:41
标题: 泛型(Generic) 求技术分
本帖最后由 pzfpang449 于 2013-1-24 10:03 编辑

泛型需要注意事项
1,使用泛型时,泛型类型必须为引用类型,不能是基本数据类型
2,泛型时提供给javac编译器使用的,它用于限定集合的输入类型,让编译器在源码级别上,既挡住向集合中插入非法数据。但编译器编译带有泛型的java程序后,生成的class文件中奖不再带有泛型信息,这个过程称之为“擦除“。
例子如下
package com.itcast;

import java.util.ArrayList;

public class fanxing {
        @Test
        public void test1(){
                List<String> list=new ArrayList<String>();
                list.add("aa");
                list.add("bb");
                list.add("cc");
                //传统
                Iterator<String> it=list.iterator();
                while(it.hasNext()){
                        String value=it.next();
                        System.out.println(value);
                }
               
        }
        @Test
        public void test2(){
                Map<Integer,String> map=new LinkedHashMap<Integer,String>();
                map.put(1, "aa");
                map.put(2, "bb");
                map.put(3, "cc");
        /*        Set<Map.Entry<Integer, String>> set= map.entrySet();
                Iterator<Map.Entry<Integer, String>> it= set.iterator();
                while(it.hasNext()){
                        Map.Entry<Integer, String>  entry=it.next();
                        Integer key=entry.getKey();
                        String value=entry.getValue();
                        System.out.println(key+":"+value);
                }*/
                //增强for,常用
                for(Map.Entry<Integer, String> entry:map.entrySet()){
                        Integer key=entry.getKey();
                        String value=entry.getValue();
                        System.out.println(key+":"+value);
                }
        }

}
结果为
1:aa
2:bb
3:cc
自定义泛型
1,类上声明的泛型,作用到类中的所有方法
2,静态成员无效,需要单独声明
public static <T> void c(T t){}

1,编写一个泛型方法,实现指定位置上的数组的元素的交换
        //编写一个泛型方法,实现指定位置上的数组的元素的交换
        public <T> void test(T arr[],int post1,int post2){
                        T temp=arr[post1];
                        arr[post1]=arr[post2];
                        arr[post2]=temp;
                        
        }
2,        //编写一个泛型方法,接受一个任意数组,并颠倒数组中的所有元素
        public <T> void test(T arr[]){
                int start = 0;
                int end = arr.length;
                while (true) {
                        if (start >= end) {
                                break;
                        }
                                T temp = arr[start];
                                arr[start] = arr[end];
                                arr[end] = temp;
                                start++;
                                end--;
                        
                }



作者: pzfpang449    时间: 2013-1-23 17:49
好人那,祝您新年快乐、工作顺利、事业、学业蒸蒸日上!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2