一、泛型概述

  jdk1.5版本以后出现的新特性,用于解决安全问题,是一个安全机制。

  好处:

  1,将运行时期的问题ClassCastException转到了编译时期。

  2,避免了强制转换的麻烦。

  什么时候用:

  当操作的引用数据类型不确定的时候。就使用泛型(<>)。将要操作的引用数据类型传入即可,其实<>就是一个用于接收具体引用数据类型的参数范围。

  在程序中,只要用到了带有<>的类或者接口,就要明确传入的具体引用数据类型。

  泛型技术是给编译器使用的技术,用于编译时期。确保了类型的安全。

  运行时,会将泛型去掉,生成的class文件中是不带泛型的,这个称为泛型的擦除。

  泛型的通配符:未知类型。

  二、泛型的使用

  import java.util.*;

  publicclass GenericDefineDemo4

  {

  publicstaticvoid main(String[] args)

  {

  ArrayList<String> arr=new ArrayList<String>();

  arr.add("java01");

  arr.add("java02");

  arr.add("java03");

  arr.add("java04");

  Iterator<String> it=arr.iterator();

  while(it.hasNext())

  {

  System.out.println(it.next());

  }

  }

  }

  三、泛型类

  1、格式

  class ClassName<datatype>

  {

  }

  2、优点

  便于对任何未知的的数据类型进行操作,特别适合用作工具类,避免了强制类型转换的麻烦。

  3.示例

  import java.util.*;

  publicclass GenericClass

  {

  publicstaticvoid main(String[] args)

  {

  Tools<String> tools=new Tools<String>("hello");

  System.out.println(tools.getObj());

  }

  }

  class Tools<T>

  {

  private T obj;

  public Tools(T t)

  {

  this.obj=t;

  }

  public T getObj() {

  returnobj;

  }

  publicvoid setObj(T obj) {

  this.obj = obj;

  }

  }

  四、泛型方法

  当只需要某一个方法可以接收不同类型的参数,而不是整个类的时候,就可以用到泛型方法,它将大大提高程序代码的扩展性。

  示例代码如下:

  import java.util.*;

  publicclass GenericMethod

  {

  publicstaticvoid main(String[] args)

  {

  String s="hello!Nice to meet you!";

  Integer inter=3;

  Show show=new Show();

  show.print(s);

  show.print(inter);

  }

  }

  class Show

  {

  public <Q> void print(Q q)

  {

  System.out.println(q);

  }

  }

  五、静态泛型方法

  1、格式

  public static <T> methodName(T param)

  {

  }

  2、特点

  由于静态方法不可以访问类中的泛型,如果静态方法操作的类型不确定,这可以把泛型定义在静态方法上。

  3、示例

  publicstatic <Q> void print(Q q)

  {

  System.out.println(q);

  }

  六、泛型接口

  1、格式

  interface Inter<T>

  {

  void show(T t);

  }

  2、特点

  当接口要操作的数据类型不确定的时候,就可以使用泛型接口。

  注意: www.yzyedu.com

  当实现接口的类已经确定了接口具体的类型时,创建对象时就不用再指明类型了,如:

  class InterImpl implements Inter<String>

  {

  }

  如果实现类仍不知道具体的类型,就要创建对象时指明,如:

  class InterImpl<T> implements Inter<T>

  {

  }

  InterImpl<String> im=new InterImpl<String>();

  3、示例

  import java.util.*;

  public class Test

  {

  public static void main(String[] args)

  {

  InterImpl<String> im=new InterImpl<String>();

  im.print("hello");

  }

  }

  interface Inter<T>

  {

  void print(T t);

  }

  class InterImpl<T> implements Inter<T>

  {

  public void print(T s)

  {

  System.out.println(s);

  }

  }

  七、泛型extends限定

  extends E:接收E类型或者E的子类型对象。上限一般存储对象的时候用。比如添加元素 addAll.

  八、泛型super限定 www.jx-jf.com

  super E:接收E类型或者E的父类型对象。下限。一般取出对象的时候用。比如比较器。

Java泛型的基本应用的更多相关文章

  1. Java泛型的历史

    为什么Java泛型会有当前的缺陷? 之前的章节里已经说明了Java泛型擦除会导致的问题,C++和C#的泛型都是在运行时存在的,难道Java天然不支持“真正的泛型”吗? 事实上,在Java1.5在200 ...

  2. 浅析Java 泛型

    泛型是JavaSE5引入的一个新概念,但是这个概念在编程语言中却是很普遍的一个概念.下面,根据以下内容,我们总结下在Java中使用泛型. 泛型使用的意义 什么是泛型 泛型类 泛型方法 泛型接口 泛型擦 ...

  3. Java:泛型基础

    泛型 引入泛型 传统编写的限制: 在Java中一般的类和方法,只能使用具体的类型,要么是基本数据类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制就会束缚很多! 解决这种限制的 ...

  4. java泛型基础

    泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 这种参数类型可以用在类.接口和方法的创建中, 分别称为泛型类.泛型接口.泛型方法.  Ja ...

  5. 使用java泛型设计通用方法

    泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 因此我们可以利用泛型和反射来设计一些通用方法. 现在有2张表, 一张user表和一张stu ...

  6. 关于Java泛型的使用

    在目前我遇到的java项目中,泛型应用的最多的就属集合了.当要从数据库取出多个对象或者说是多条记录时,往往都要使用集合,那么为什么这么使用,或者使用时有什么要注意的地方,请关注以下内容. 感谢Wind ...

  7. 初识java泛型

    1 协变数组类型(covariant array type) 数组的协变性: if A IS-A B then A[] IS-A B[] 也就是说,java中的数组兼容,一个类型的数组兼容他的子类类型 ...

  8. 【Java心得总结四】Java泛型下——万恶的擦除

    一.万恶的擦除 我在自己总结的[Java心得总结三]Java泛型上——初识泛型这篇博文中提到了Java中对泛型擦除的问题,考虑下面代码: import java.util.*; public clas ...

  9. 【Java心得总结三】Java泛型上——初识泛型

    一.函数参数与泛型比较 泛型(generics),从字面的意思理解就是泛化的类型,即参数化类型.泛型的作用是什么,这里与函数参数做一个比较: 无参数的函数: public int[] newIntAr ...

  10. 初识Java泛型以及桥接方法

    泛型的由来 在编写程序时,可能会有这样的需求:容器类,比如java中常见的list等.为了使容器可以保存多种类型的数据,需要编写多种容器类,每一个容器类中规定好了可以操作的数据类型.此时可能会有Int ...

随机推荐

  1. 类似NL的update更新

    update b set b.object_name=(select a.object_name from a where a.object_id=b.object_id); create table ...

  2. Linux&shell之处理用户输入

    写在前面:案例.常用.归类.解释说明.(By Jim) 命令行参数$1为第一个参数,$2为第二个参数,依次类推...示例: #!/bin/bash # using one command line p ...

  3. 强联通 HDU 1269

    第一道强联通的题目纪念一下! 主要是模版 tarjan算法 #include <iostream> #include <cstdlib> #include <cstdio ...

  4. HDOJ 1163 Eddy's digital Roots 九余数定理+简单数论

    我在网上看了一些大牛的题解,有些知识点不是太清楚, 因此再次整理了一下. 转载链接: http://blog.csdn.net/iamskying/article/details/4738838 ht ...

  5. C++ Primer Plus(第6版)中文版——课后练习程序代码

    博客内容经历了一次整理,以前发的博文太散.没什么水准,搞的随笔分类越来越多orz,这次把CPP这本书的课后练习的程序代码放到一起方便查阅与修改..嗯 9.6.1 #ifndef _9..1_H_ #d ...

  6. STL_iterator迭代器(1)——迭代器的分类

    一.容器迭代器 尽管C++指针也是迭代器,但用的更多的是容器迭代器.容器迭代器用法和iterdemo.cpp一样,但和将迭代器申明为指针变量不同的是,你可以使用容器类方法来获取迭代器对象.两个典型的容 ...

  7. Scala 编程(一)Scala 编程总览

    Scala 简介 Scala 属于“可伸展语言”,源于它可以随使用者的需求而改变和成长.Scala 可以应用在很大范围的编程任务上,小到脚本大到建立系统均可以. Scala 跑在标准 Java 平台上 ...

  8. [Javascript] Advanced Reduce: Additional Reducer Arguments

    Sometimes we need to turn arrays into new values in ways that can't be done purely by passing an acc ...

  9. 命名空间引用问题 包括找不到ConfigurationManager 这个类

        因为SqlConnection类是属于 System.Data.SqlClient命名空间下的,     所以命名空间引用的时候需要加上 System.Data.SqlClient,代码如下: ...

  10. 单向链表JAVA代码

        //单向链表类 publicclassLinkList{       //结点类     publicclassNode{         publicObject data;         ...