首页 > 其他 > 详细

Generic泛型

时间:2015-08-14 13:19:44      阅读:151      评论:0      收藏:0      [点我收藏+]

1.问题

未使用泛型时,元素的类型不安全;操作麻烦,可能需要强制转换
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import day8.Customer;

public class GenericTest {
    @Test
    public void testCollectionGeneric() {
        List l1=new ArrayList();
        l1.add(new Customer(1,"AA"));
        l1.add(new Customer(3,"CC"));
        l1.add(new Customer(2,"BB"));
              //类型不安全:可以放入任何类型的元素
        l1.add(10);
             //操作麻烦:从集合中取元素时,需要进行类型的强制转换
        Customer c0=(Customer) l1.get(0);
        System.out.println(c0);

        }

}

2.引入
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;

public class GenericTest {
    @Test
    public void testCollectionGeneric() {

                //声明一个Customer类型的List
        List<Customer> l2=new ArrayList<Customer>();
        l2.add(new Customer(1,"AA"));
        l2.add(new Customer(3,"CC"));
        l2.add(new Customer(2,"BB"));        
//      l2.add(10);      无法放入其他类型的元素
        Customer c1=l2.get(1);            //获取元素无需强转
        System.out.println(c1);

        }

}

3.场合

<E,K...>:泛型参数,可以在使用其他类型的场合都可以使用泛型类型;泛型参数可以有多个。

1.声明泛型类

public class GenericClass<E,K> {
    private E i;               //变量类型由泛型类决定

    private K j;
    public E getI() {      
        return i;
    }
    public void setI(E i) {      //方法的类型和参数也由泛型类决定
        this.i = i;
    }
}

public class GenericTest1 {
    public static void main(String args[]){
        GenericClass<Integer,String> gc=new GenericClass<Integer,String>();       //确定泛型类
        gc.setI(123);           //参数为int类型
        System.out.println(gc.getI());
    }
}

2.声明泛型方法

泛型的声明,必须在public,static,final,abstract等之后,返回值声明之前;可以拥有多个泛型参数。

public class GenericMethod{
    public  <E> E getI(E i){
        return i;        
    }   
    public <E> E getN(int i){
        return null;
    }   
    public <E> void display(E i) {
        System.out.println(e.getClass());
    }    
}
public class GenericTest1 {
    public static void main(String args[]){       
        GenericMethod gm=new GenericMethod();
        gm.getI(1);
        gm.getN(1);
        System.out.println(gm.getI(1));
        System.out.println(gm.getN(1));
        gm.display(1);
        gm.display("1");
        gm.display(12.13);
    }
}

技术分享

3.声明泛型集合

确保了元素的类型安全,操作简单

import java.util.HashMap;
import java.util.Map;

public class GenericTest {
    @Test
    public void testCollectionGeneric() {

         Map<String,Integer> score=new HashMap<String,Integer>();
        score.put("1", 90);
        score.put("2", 80);
        score.put("3", 70);
//        score.replace("1", 90, 100);      
        /*Set<String> keyset=score.keySet();
        for(String key : keyset){
            Integer value=score.get(key);
            System.out.println(key+" : "+value);
        }*/
        for(Map.Entry<String, Integer> entry:score.entrySet()){
            String key=entry.getKey();
            int value=entry.getValue();
            int hashcode=entry.hashCode();                                    
            System.out.println(hashcode+" -> "+key+" : "+value);
        }

}

 

 


 

 

Generic泛型

原文:http://www.cnblogs.com/jfl-xx/p/4729458.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!