一:泛型简单介绍:

(1)所谓泛型,就是变量类型的參数化。

泛型是JDK1.5中一个最重要的特征。通过引入泛型,我们将获得编译时类型的安全和执行时更小的抛出ClassCastException的可能。在JDK1.5中,你能够声明一个集合将接收/返回的对象的类型。使用泛型时假设不指明參数类型,即泛型类没有參数化。会提示警告。此时类型为Object。

(2)为什么使用泛型

使用泛型的典型样例。是在集合中的泛型使用。假设不使用泛型。存入集合中的元素能够是不论什么类型的,当从集合中取出时,全部的元素都是Object类型。须要进行向下的强制类型转换,转换到特定的类型。

比方:

List myIntList = new LinkedList(); // 1

myIntList.add(new Integer(0)); // 2

Integer x = (Integer) myIntList.iterator().next(); // 3   

第三行的这个强制类型转换可能会引起执行时的错误。





泛型的思想就是由程序猿指定类型。这样集合就仅仅能容纳该类型的元素。

使用泛型:

List<Integer> myIntList = new LinkedList<Integer>(); // 1'

myIntList.add(new Integer(0)); // 2'

Integer x = myIntList.iterator().next(); // 3'

将第三行的强制类型转换变为了第一行的List类型说明。编译器会为我们检查类型的正确性。这样,代码的可读性和健壮性也会增强。





(3)泛型使用基础



public interface List <E> {

    void add(E x);

    Iterator<E> iterator();

}



public interface Iterator<E> {

    E next();

    boolean hasNext();

}

尖括号里包括的是形式类型參数(formal type parameters),它们就如同一般的类型一样。能够在整个类的声明中被使用。当类被使用时。会使用详细的实际类型參数(actual type argument)取代。比方前面的样例中的List<Integer>,那么全部的E将会被Integer类型所取代。

泛型类型參数仅仅能被类或接口类型赋值,不能被原生数据类型赋值。原生数据类型须要使用相应的包装类。

形式类型參数的命名:尽量使用单个的大写字母(有时候多个泛型类型时会加上数字。比方T1,T2)。比方很多容器集合使用E,代表element(元素)。Map中用K代表键keys,V代表值。

二 实际应用:

(1) 创建接口ParentInterface 的java文件

  1. package edu.tju.cs;
  2.  
  3. public interface ParentInterface<T1,T2>{
  4. public void setFoo1(T1 foo1);
  5. public void setFoo2(T2 foo2);
  6. public T1 getFoo1();
  7. public T2 getFoo2();
  8.  
  9. }

(2) 创建实现类ChildClass的java文件

  1. package edu.tju.cs;
  2.  
  3. public class ChildClass<T1,T2> implements ParentInterface<T1, T2>{
  4. private T1 foo1;
  5. private T2 foo2;
  6.  
  7. @Override
  8. public void setFoo1(T1 foo1){
  9. this.foo1 = foo1;
  10.  
  11. }
  12. @Override
  13. public void setFoo2(T2 foo2){
  14. this.foo2 = foo2;
  15. }
  16. @Override
  17. public T1 getFoo1(){
  18. return this.foo1;
  19. }
  20. @Override
  21. public T2 getFoo2(){
  22. return this.foo2;
  23. }
  24.  
  25. public static void main(String[] args) {
  26. ChildClass<String,String> cc = new ChildClass<String,String>();
  27. cc.setFoo1("徐勤柱");
  28. cc.setFoo2("王昭娴");
  29. System.out.println("get() " + cc.getFoo1());
  30. System.out.println("get() " + cc.getFoo2());
  31.  
  32. ChildClass<Integer,String> cc2 = new ChildClass<Integer,String>();
  33. cc2.setFoo1(123);
  34. cc2.setFoo2("吴明静");
  35. System.out.println("get() " + cc2.getFoo1());
  36. System.out.println("get() " + cc2.getFoo2());
  37.  
  38. ChildClass<String,Number> cc3 = new ChildClass<String,Number>();
  39. cc3.setFoo1("申佳维");
  40. cc3.setFoo2(123.4556);
  41. System.out.println("get() " + cc3.getFoo1());
  42. System.out.println("get() " + cc3.getFoo2());
  43. }
  44. }

三  学习心得:

(1)java 泛型不能够有基本类型

List<int> list=new ArrayList<int>();//这里。这样是错误的

list.add(0);

list.add(1);

这是由于:泛形要求能包容的是对象类型,而基本类型在java里不属于对象。可是基本类型都有其包装类型,也就是对象类型:

int->Integer

long->Long

....

那么你要想存放基本类型就用其包装类型去实现功能

 List<Integer> list=new ArrayList<Integer>();

list.add(0);

list.add(1);



总之中的一个句话。泛型里面能够放<integer> ,<character>。int,char 基本类型是不能够的。泛型里面是能够放引用类型的,比方放个对象类型。<User>.

http://docs.oracle.com/javase/tutorial/extra/generics/simple.html

java泛型 之 入门(interface)的更多相关文章

  1. 大白话说Java泛型:入门、使用、原理

    文章首发于[博客园-陈树义],点击跳转到原文<大白话说Java泛型:入门.使用.原理> 远在 JDK 1.4 版本的时候,那时候是没有泛型的概念的.当时 Java 程序员们写集合类的代码都 ...

  2. Java泛型入门

      Java泛型入门 在学习本章之前,须要对Java的集合(Collection.Map)有一定的基础. Java集合有一个缺点.就是把一个对象"丢进"集合里后,集合就会&qu ...

  3. 大白话说Java泛型(一):入门、原理、使用

    文章首发于[博客园-陈树义],点击跳转到原文<大白话说Java泛型(一):入门.原理.使用> 远在 JDK 1.4 版本的时候,那时候是没有泛型的概念的.当时 Java 程序员们写集合类的 ...

  4. JavaSE入门学习21:Java面向对象之接口(interface)(二)

    一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...

  5. JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识

    JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...

  6. JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP、IOC)

    接上篇<JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构.调试.部署>,通过一个简单的JSP WEB网站了解了JAVA WEB相关的知识,比如:Ser ...

  7. Java基础系列二:Java泛型

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.泛型概述 1.定 ...

  8. Java——Java泛型

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.泛型概述 1.定 ...

  9. 20、Java 泛型

    1.晓之以理,动之以码 学Java就是很上头哦,一来直接三连问!!! 什么是泛型?为什么要用泛型?泛型怎么用? 当然泛型在Java中有很重要的一个地位,在面向对象编程以及在各种设计模式中有非常广泛的应 ...

随机推荐

  1. (转载)Jvm工作原理学习笔记

    一.        JVM的生命周期 1.      JVM实例相应了一个独立执行的java程序它是进程级别 a)    启动.启动一个Java程序时.一个JVM实例就产生了.不论什么一个拥有publ ...

  2. 【Android】自己定义控件——仿天猫Indicator

    今天来说说类似天猫的Banner中的小圆点是怎么做的(图中绿圈部分) 在学习自己定义控件之前,我用的是很二的方法,直接在布局中放入多个ImageView,然后代码中依据Pager切换来改变图片.这样的 ...

  3. 使用MVC模式开发一简单的销售额查询系统

    与上一篇比较,只改变了index.jsp文件中form的提交路径 <form action="ShowServlet" method="post"> ...

  4. 收货MIGO

    FUNCTION zrfc_mm003. *"---------------------------------------------------------------------- * ...

  5. tq2440+fedora安装qt4.5

    1. make[1]: arm-none-linux-gnueabi-g++:命令未找到 make[1]: *** [.obj/release-shared-emb-arm/qatomic_arm.o ...

  6. vld(Visual Leak Detector) 内存泄露检测工具

    初识Visual Leak Detector 灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题.当程序越来越复 杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题.内存 ...

  7. 基于visual Studio2013解决C语言竞赛题之1063分橘子

       题目 解决代码及点评 /* 功能:某桔农家共有2520只桔子, 父亲要将它们分给六个儿子,其分法如下: 父亲先将2520只桔子分给六个儿子, 然后说:"老大,把你分到的桔子 ...

  8. 如何在SourceInsight中选中匹配的大括号中的内容

    如何在SourceInsight中选中匹配的大括号中的内容 要分析的代码很长,多个for,if等分析嵌套在一起,代码有点乱,找到了这个分支的头,却不知道尾在哪,找到了尾却不知道哪是开头,在网上找了一下 ...

  9. Microsoft office PPT 2007 保存时速度慢(整理自网上)

    问题描述: XP sp3上运行PPT2007,当需要保存文件时,发现竟然需要近1分钟才能保存完毕,其间可能会出现“瘟都死沙漏”来提示你正在保存. 这简直慢到过分慢到无法容忍,一开始以为是ppt文件过大 ...

  10. 火炬之光模型导出(Unity载入火炬之光的模型)

    先说明几点.导出方案可行,測试通过. python和blender的版本号一定要用下文中所说的.新的Python或者是新的Blender版本号都无法完美导入. 导入导出脚本能够选择 (http://c ...