黑马程序员——泛型

原创 2015年07月08日 22:49:09

1.泛型的定义

泛型是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。方便将大量的类似的代码进行代码级别的优化。之所以要使用泛型,就是需要大量的使用容器类,原来的数组已经满足不了需求,

2.泛型使用场景

  泛型在java中,随处可见,比如在使用HashMap时,需要对数据的keyvalue类型进行定义,如果不适用泛型,则会定义多个HashMap的类型,代码的核心内容和思想是完全的相同,可能只是其中的需要处理的数据的类型不同。如果使用了泛型,则可以避免类似的问题。比如HashMap的定义如下:

public class HashMap<K,V>  extends AbstractMap<K,V>

    implements Map<K,V>, Cloneable, Serializable{.....}

通过HashMap的定义,在实例化时,如果你想keyvalue的类型是String,或者Int都可以,然后进行数据的put操作或者get操作。

web代码的开发环境中,大量的实体类型存在添加、修改、删除和查询操作的,如果为每一个实体都写相同的操作,代码的冗余量非常大,如果使用泛型,则会在完成相同的功能的前提下,少写大量的代码,例如:添加,修改,删除的操作类使用了泛型的定义如下:

public class CommonDaoImpl<T> implements ICommonDao<T>{

public CommonDaoImpl() {

ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();// 获取泛型类型的参数类别

clazz = (Class<T>) type.getActualTypeArguments()[0];// 获取泛型参数的第一个参数

}

@Override

public Serializable save(T entity) {//数据的添加操作

Serializable id = this.getSession().save(entity);

return id;

}

 

}

以上的类和方法,完全是做了一些公共的操作方法,只需要在编写代码的过程中,将要操作的实体传过来,则会完成相应的操作,大大的减少了代码量,提高了工作效率。

3.泛型分类

泛型的的类别一般就是泛型类,泛型方法,泛型数组,但是,通常是不能直接定义泛型数组的,而是使用了java代码库中定义的如:List接口和其实现类来操作的。

1) 简单的泛型

泛型的定义非常的简单,在定义的类之后加上<T>,其中的T可以使任意的字符,如:public class BaseAction<T>{......}

2) 泛型接口

java中,接口也可以使泛型的,将接口定义为泛型,实现类可以根据具体的实体去操作数据,如:java源代码中List对象的泛型定义如下:

public interface List<E> extends Collection<E>{

 Iterator<E> iterator();

 E set(int index, E element);

 ......

}

在泛型接口中定义以后,实现类可以根据自己的需要,然后传入实体对象,对数据进行操作。

3) 泛型方法

泛型方法使得该方法能偶独立于类而产生变化,如论何时,只要能够做到,就尽量的使用泛型方法,如果泛型方法可以取代将整个类泛型化,那就应该只是用泛型方法。要定义泛型方法,则需要将泛型参数列表至于返回值之前。如下面代码:

public   class  GenericMethod 

{  

   public  <T>  String  toString(T oT)  throws  SecurityException,  

            NoSuchMethodException, IllegalArgumentException,  

            IllegalAccessException, InvocationTargetException  

    {  

…………

}

}

只需要在方法中使用泛型,不需要在类中加入泛型的定义,同时也要将返回的泛型添加到返回值的前面。

4.泛型边界

边界使得你可以在泛型的参数上设置限制条件。比如你传入的参数必须是某一个类的子类,不继承自该类的就不能作为参数,则在泛型定义时就要进行限制,对于此种情况,定义如下:

public class Dog<? extends Animal>{.....}

此时,参数的对象必须继承对象Animal,才能够是正确的使用方式,保证类类型的安全

如果你的泛型的参数限制必须是某个类的父类或者某个类的下限,则可以使用如果的方式

public class SuperTypeWildcards<? super Apple>{

…………

}

泛型的边界可以保证你传入一个安全的对象到泛型类型中,从而确保传入的参数类型的安全。

 

相关文章推荐

黑马程序员——34,TreeSet与泛型

黑马程序员——34,TreeSet与泛型 旧博客整理归纳: 一:TreeSet----》         TreeSet集合的底层数据结构是二叉树结构,元素进入容器后会自动被排序,不可以存放重复元素,...

黑马程序员——【Java反射学习】反射的应用:测试泛型的本质

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- Class类的使用方法的反射成员变量的反射构造函数的反射反射的应用:测试泛型的本质...

黑马程序员——java基础加强之泛型

体验泛型 ●  Jdk 1.5以前的集合类中存在什么问题 ArrayList collection = new ArrayList(); collection.add(1); collection.a...

黑马程序员——java基础知识之泛型、集合(Map、工具类等)

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——- (一)、泛型...

黑马程序员——java基本数据类型包装类,泛型,Collections类,arrays工具类,System类,Runtime类,时间类,Math类

------- android培训、java培训、期待与您交流! ---------- 前言:通过观看毕向东老师的java基础视频,查漏补缺,将一些自己掌握的还不牢固的知识写出来,希望和大家交流分享。...
  • hgdswj
  • hgdswj
  • 2015年06月28日 13:12
  • 677

黑马程序员——泛型限定,上限,下限

----------------------    android培训    java培训   期待与您交流!    ----------------------                ...

黑马程序员——Java泛型

--------------------- android培训、java培训、期待与您交流! ---------------------- 泛型:JDK1.5以后出现,解决安全机制 1.将运行时期...

黑马程序员——高新技术--泛型

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——- 泛型: 在新建和声明对象的类时,在类的后边加上类型,那么就只有声明的类型的元素才能加进该对象里面。 ...

黑马程序员--Java面向对象——泛型

面向对象 泛型(Generic) 入门泛型的基本应用 代码示例: package com.tuozou.day02; import java.util.Ar...

黑马程序员——java基础(集合框架、泛型)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 第九章:java基础(集合框架、泛型)   本章概述: 第一部分:集合框架 第二部分:集合框...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员——泛型
举报原因:
原因补充:

(最多只允许输入30个字)