• Generic泛型


    1.问题

    未使用泛型时,元素的类型不安全;操作麻烦,可能需要强制转换

     1 import java.util.ArrayList;
     2 import java.util.List;
     3 import org.junit.Test;
     4 import day8.Customer;
     5 
     6 public class GenericTest {
     7     @Test
     8     public void testCollectionGeneric() {
     9         List l1=new ArrayList();
    10         l1.add(new Customer(1,"AA"));
    11         l1.add(new Customer(3,"CC"));
    12         l1.add(new Customer(2,"BB"));
    13               //类型不安全:可以放入任何类型的元素
    14         l1.add(10);
    15              //操作麻烦:从集合中取元素时,需要进行类型的强制转换
    16         Customer c0=(Customer) l1.get(0);
    17         System.out.println(c0);
    18 
    19         }
    20}

    2.引入

     1 import java.util.ArrayList;
     2 import java.util.List;
     3 import org.junit.Test;
     4 
     5 public class GenericTest {
     6     @Test
     7     public void testCollectionGeneric() {
     8 
     9                 //声明一个Customer类型的List
    10         List<Customer> l2=new ArrayList<Customer>();
    11         l2.add(new Customer(1,"AA"));
    12         l2.add(new Customer(3,"CC"));
    13         l2.add(new Customer(2,"BB"));        
    14 //      l2.add(10);      无法放入其他类型的元素
    15         Customer c1=l2.get(1);            //获取元素无需强转
    16         System.out.println(c1);
    17 
    18         }
    19 }

    3.场合

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

    1.声明泛型类

     1 public class GenericClass<E,K> {
     2     private E i;               //变量类型由泛型类决定
     3 
     4     private K j;
     5     public E getI() {       
     6         return i;
     7     }
     8     public void setI(E i) {      //方法的类型和参数也由泛型类决定
     9         this.i = i;
    10     }
    11 }
    12 
    13 public class GenericTest1 {
    14     public static void main(String args[]){
    15         GenericClass<Integer,String> gc=new GenericClass<Integer,String>();       //确定泛型类
    16         gc.setI(123);           //参数为int类型
    17         System.out.println(gc.getI());
    18     }
    19 }

    2.声明泛型方法

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

     1 public class GenericMethod{
     2     public  <E> E getI(E i){
     3         return i;        
     4     }    
     5     public <E> E getN(int i){
     6         return null;
     7     }    
     8     public <E> void display(E i) {
     9         System.out.println(e.getClass());
    10     }    
    11 }
    12 public class GenericTest1 {
    13     public static void main(String args[]){        
    14         GenericMethod gm=new GenericMethod();
    15         gm.getI(1);
    16         gm.getN(1);
    17         System.out.println(gm.getI(1));
    18         System.out.println(gm.getN(1));
    19         gm.display(1);
    20         gm.display("1");
    21         gm.display(12.13);
    22     }
    23 }

    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);
            }
    
    }

  • 相关阅读:
    bat 笔记 一
    air 桌面应用发布后可以删除的文件
    as3 去掉字符串空白问题
    as3 air 获取文件夹下的所有文件
    egret 配置设置
    egret 精简游戏项目
    starling 第一天
    《笨办法学Python》 第2课手记
    《笨办法学Python》 第1课手记
    《笨办法学Python》 第0课手记
  • 原文地址:https://www.cnblogs.com/jfl-xx/p/4729458.html
Copyright © 2020-2023  润新知