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. [Effective Java]第八章 通用程序设计

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. asp.netMVC4(基础知识----传值问题分析)

    (1)一般在数据交互的时候,都会涉及到前后台间的相互传值,一般的情况下,方法也有多种,下面就后台定义变量往前台传值: 以下是后台代码: /// <summary> /// 展示举报信息 / ...

  3. NPN&PNP

    一.晶体管基础知识 晶体管分2种:NPN.PNP 晶体管通常封装为TO-92,下面是元件实物图 和 元件符合: NPN: 当电压和电流被加到基极上时,NPN晶体管: 其工作原理: 就像水龙头—给控制开 ...

  4. js addEventListener attachEvent

    attachEvent方法,为某一事件附加其它的处理事件.(不支持Mozilla系列) addEventListener方法 用于 Mozilla系列 举例: document.getElementB ...

  5. iOS - MVVM 架构模式

    1.MVVM 从字面意思来理解,MVVM 即 Modal View ViewModel(模型 视图 视图模型).MVC 是一个用来组织代码的权威范式,也是构建 iOS App 的标准模式.Apple ...

  6. java SE (java Standard Edition)

    14.10.22 学习java SE的Object: -------------------------------------15.11.18----

  7. poj1873The Fortified Forest

    链接 居然是WF的水题~ 二进制枚举砍哪些树,剩余的树围成一个凸包. 因为传数组WA了两发,忘记修改排序数组中的p[0]; #include <iostream> #include< ...

  8. Python学习笔记3—字符串

    原始字符串 使用\转义或者r,这种方法在网站设置网站目录结构的时候非常管用. >>> dos="c:\news" >>> print dos c ...

  9. Android事件传递机制(转)

    Android事件构成 在Android中,事件主要包括点按.长按.拖拽.滑动等,点按又包括单击和双击,另外还包括单指操作和多指操作.所有这些都构成了Android中的事件响应.总的来说,所有的事件都 ...

  10. 【spring-quartz】 定时调度,时间设置

    .   CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 ...