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泛型的更多相关文章

  1. JAVA入门——Generic/泛型

    在台科大的第二次JAVA作业,老师课上讲的内容是泛型. 泛型(generic),泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以 ...

  2. Java - 泛型 ( Generic )

    Java - 泛型 ( Generic )     > 泛型的特点         > 解决元素存储的安全性问题         > 解决获取数据元素时,需要类型强转的问题     ...

  3. Java 8 新特性之泛型的类型推导

    1. 泛型究竟是什么? 在讨论类型推导(type inference)之前,必须回顾一下什么是泛型(Generic).泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据 ...

  4. 泛型深入--java泛型的继承和实现、泛型擦除

    泛型实现类: package generic; /** * 泛型父类:子类为“富二代”:子类的泛型要比父类多 * 1,保留父类的泛型-->子类为泛型类 * 2,不保留父类泛型-->子类按需 ...

  5. asp.net数据类型--泛型

    asp.net有很多的数据类型,同时c#等均是强数据类型,在使用的过程,存在因数据类型不一致,在编译时通过,在使用过程中出错的情况,因此从2.0起,增加泛型这种类型.这种类型,在定义时不指定类型,而在 ...

  6. C#基础-hashtable,泛型和字典集合

    hashtable 的存储方式 使用方法: 1.引入包含Hashtable的命名空间 using System.Collections; // 引入Hash所在的命名空间 2.往hash表里面添加数据 ...

  7. java 关于泛型的一些知识点

    public class Generic <T>{ private T ob; public Generic(T ob){ this.ob=ob; } public T GetOb(){ ...

  8. 那些年【深入.NET平台和C#编程】

    一.深入.NET框架 1..NET框架具有两个组件:CLR(公共语言运行时)和FCL(框架类库),CLR是.NET框架的基础 2.框架核心类库: System.Collections.Generic: ...

  9. S2---深入.NET平台和C#编程的完美总结

    1.NET简单解说 l 面向对象提升 OOP(Object Oriented  Programming)面向对象编程 AOP:(Aspache  Oriented Programming):面向切面编 ...

随机推荐

  1. NoSQL数据库:数据的一致性

    NoSQL数据库:数据的一致性 读取一致性 强一致性 在任何时间访问集群中任一结点,得到的数据结果一致: 用户一致性 对同一用户,访问集群期间得到的数据一致: 解决用户一致性:使用粘性会话,将会话绑定 ...

  2. run a Freight robot (3)

    5.Logging In Once the robot is turned on and the robot is on the network, ssh into the computer of t ...

  3. Java中String,StringBuffer,StringBuilder的区别及其使用

    由于笔试面试经常会问到这个问题,所以在这里先把这些问题搞清楚. String:自JDK1.0开始即有,源码中对String的描述: "Strings are constant; their ...

  4. Nginx RTMP 专题

    说明: 记录器 - 记录器名称 path - 记录文件路径(recorded file path) (/tmp/rec/mystream-1389499351.flv)filename - 省略目录的 ...

  5. EAPOL 协议

    EAPOL 协议 一.基本概念 EAPOL 的全称为 Extensible Authentication Protocol Over LAN,即 EAP Over Lan,也即基于局域网的扩展认证协议 ...

  6. iOS开发之 Xcode6 添加xib文件,去掉storyboard的hello world应用

    iOS开发之  Xcode6.1创建仅xib文件,无storyboard的hello world应用 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理 ...

  7. iOS开发之Xcode 6 国际化

    Xcode6 国际化 (1) 新建一个Single View app模版项目,命名为LocalizationTest 1.建立strings文件,命名为Localization.strings 2.点 ...

  8. 键盘控制div移动

    <!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8&qu ...

  9. Selected SVN connector library is not available or cannot be loaded

    1.错误描述 The following data will be sent: ------ STATUS ------ pluginId            org.eclipse.team.sv ...

  10. [Hibernate] - EAGER and LAZY

    Hibernate中的字段映射中的Fetch有两种方式:EAGER和LAZY Eager:全部抓取 Lazy:延迟抓取 如果在字段中声明为Eager,那么在取得当前Bean时,同时会抓取Bean中的关 ...