`
longgangbai
  • 浏览: 7326012 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于项目中泛型的应用

阅读更多

  在项目采用JDK1.6采用泛型开发,在开发应用之中减少了大部分代码的编写,尤其是MVC三层架构中的基本操作(DAO中增删该查简称CRUD操作以及与之对象在各层中公用),此功劳得知于JDK1.5以后中泛型的广泛使用。

 

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

  在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。

 

    Java语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

    泛型在使用中还有一些规则和限制:
    1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
    2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。
    3、泛型的类型参数可以有多个。
    4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上成为“有界类型”。
    5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName(Java.lang.String);
    泛型还有接口、方法等等,内容很多,需要花费一番功夫才能理解掌握并熟练应用。在此给出我曾经了解泛型时候写出的两个例子(根据看的印象写的),实现同样的功能,一个使用了泛型,一个没有使用,通过对比,可以很快学会泛型的应用,学会这个基本上学会了泛型70%的内容。

项目中DAO的泛型如下:

 

显示此接口类中Model中T必须实现PersistenceSupport类,并ID继承序列化接口

public interface GenericDao<T extends PersistenceSupport, ID extends Serializable> {
 
 /**
  *
  * @param id
  * @return
  */
 T load(ID id);
 
 /**
  *
  * @param id
  * @return
  */
 T reloadById(ID id);
 
 /**
  *
  * @param id
  * @return
  */
 T get(ID id);
 
 /**
  *
  * @param entity
  * @return
  */
 ID save(T entity);
 
 /**
  *
  * @param entity
  */
 void update(T entity);
 
 /**
  *
  * @param entity
  */
 void saveOrUpdate(T entity);
 
 /**
  *
  * @param entities
  */
 void saveOrUpdateAll(Collection<T> entities);
 
 /**
  *
  * @param entity
  */
 void delete(T entity);
 
 /**
  *
  * @param id
  */
 void delete(ID id);
 
 /**
  *
  * @param entities
  */
 void deleteAll(Collection<T> entities);
 
 /**
  *
  * @return
  */
 List<T> findAll();
 
 /**
  * 使用Hibernate的Example机制,获取与example具有相同属性(not null的属性)的entities
  * @param example
  * @return
  */
 public List<T> findByExample(T example);
 
 /**
  * 使用Hibernate的Example机制,获取与example具有相同属性(not null的属性)的entities
  * @param example
  * @param firstResult
  * @param maxResults
  * @return
  */
 public List<T> findByExample(T example, int firstResult, int maxResults);
 
}
服务类的接口类:

public interface GenericService<T extends PersistenceSupport, ID extends Serializable>

 

Action的抽象类:T表示Model,S表示Service

public abstract class BaseAction<T, S extends GenericService> extends PaginateActionSupport<T>

 

例子一:使用了泛型

    public class Gen<T> {
    private T ob; //定义泛型成员变量
      public Gen(T ob) {
         this.ob = ob;
    }
      public T getOb() {
       return ob;
    }
      public void setOb(T ob) {
     this.ob = ob;
    }
      public void showTyep() {
       System.out.println("T的实际类型是: " + ob.getClass().getName());
    }
    }

    public class GenDemo {
     public static void main(String[] args){
        //定义泛型类Gen的一个Integer版本
        Gen<Integer> intOb=new Gen<Integer>(88);
        intOb.showTyep();
        int i= intOb.getOb();
        System.out.println("value= " + i);
          System.out.println("----------------------------------");
          //定义泛型类Gen的一个String版本
       Gen<String> strOb=new Gen<String>("Hello Gen!");
       strOb.showTyep();
       String s=strOb.getOb();
       System.out.println("value= " + s);
         }
    }

    例子二:没有使用泛型

    public class Gen2 {
     private Object ob; //定义一个通用类型成员
       public Gen2(Object ob) {
      this.ob = ob;
    }
       public Object getOb() {
      return ob;
    }
       public void setOb(Object ob) {
      this.ob = ob;
    }
       public void showTyep() {
      System.out.println("T的实际类型是: " + ob.getClass().getName());
    }
    }

    public class GenDemo2 {
     public static void main(String[] args) {
   //定义类Gen2的一个Integer版本
   Gen2 intOb = new Gen2(new Integer(88));
   intOb.showTyep();
   int i = (Integer) intOb.getOb();
   System.out.println("value= " + i);
        System.out.println("----------------------------------");
        //定义类Gen2的一个String版本
   Gen2 strOb = new Gen2("Hello Gen!");
   strOb.showTyep();
   String s = (String) strOb.getOb();
   System.out.println("value= " + s);
      }
    }

 

 

有上面代码可以知道通过使用泛型简化项目中大部分的基本简单操作,提高了代码的重用性和利用率。

分享到:
评论

相关推荐

    Java泛型应用实例

    在Java泛型应用实例中,我们可以看到泛型如何帮助我们提高代码的灵活性和效率,减少运行时的类型检查和强制转换。 首先,让我们理解泛型的基本概念。泛型主要由两部分组成:类型参数和类型边界。类型参数是在类或...

    WCF中应用泛型

    #### 二、目标:WCF服务中的泛型应用 本章节的目标是在WCF服务契约的操作契约中应用泛型,以实现类似于下面的效果: ```csharp [OperationContract] TMethodName(int dataType) where T : EntityBase; ``` 或者 ...

    3个泛型项目源码.rar

    压缩包中的项目可能涵盖以下泛型应用场景: 1. 泛型容器:例如,自定义的堆栈、队列或者优先级队列等数据结构,利用泛型可以处理任何类型的数据,提高代码的复用性。 2. 泛型算法:比如排序、查找等算法,通过泛型...

    C#中的集合与泛型应用实例

    在实际项目中,熟练掌握这两者将有助于编写出更高效、更健壮的代码。通过对ArrayList、LinkedList、List、Dictionary, TValue&gt;等集合的深入理解和运用,以及对泛型类、接口、方法、委托的灵活使用,开发者能够更好地...

    Python中泛型函数应用案例.pdf

    最后,由于文档内容是通过OCR扫描得到的,存在一些文字识别错误和漏识,这在实际应用中可能会导致理解上的困难,因此在使用这些信息时需要结合其他资料和技术知识来确保信息的准确性。通过深入理解文档内容,开发者...

    泛型集合应用(dictionary<obj,obj>)

    本文将深入探讨“泛型集合应用——Dictionary, Obj&gt;”这一主题,揭示其在实际开发中的广泛应用。 首先,我们来了解什么是泛型。泛型是.NET框架的一个核心特性,它允许我们在编写代码时定义类型参数,这些参数可以在...

    c# 泛型、集合应用实例源码

    C#中的泛型和集合是编程中不可或缺的部分,特别是在ASP.NET Web项目的开发中,它们能够极大地提高代码的可重用性和性能。以下是对这些主题的深入解析: **泛型** 泛型是C#的一项强大特性,它允许在不指定具体数据...

    C#泛型类、泛型方法、泛型接口、泛型委托的实例

    本文将深入探讨泛型类、泛型方法、泛型接口和泛型委托,并通过实例来阐述它们的应用。 首先,我们来看泛型类。泛型类是具有一个或多个类型参数的类。类型参数是在定义类时使用的占位符,实际的类型在创建类的实例时...

    Cpp设计新思维_泛型编程与设计模式之应用

    《Cpp设计新思维_泛型编程与设计模式之应用》这本书深入探讨了C++编程中的泛型编程和设计模式的应用,对于提升C++开发者的技术水平具有...书中的实例和讲解将帮助开发者深入理解这些概念,并能够在实际项目中灵活应用。

    关于C#、java泛型的看法

    在实际应用中,C#的泛型在效率上可能具有优势,因为编译器能够对泛型进行更深入的优化。例如,C#的泛型集合类如List在运行时可以使用非装箱的值类型,而Java的ArrayList由于类型擦除,对于非引用类型仍需进行装箱...

    java泛型的内部原理及更深应用

    在“java泛型的内部原理及更深应用”这个主题中,我们将深入探讨以下几个关键知识点: 1. **类型擦除**:Java泛型的主要特点是类型擦除。这意味着在编译完成后,所有的泛型信息都会被擦除,替换为Object或者其他...

    泛型dao 泛型dao 泛型dao

    当应用中需要使用到上十张表时,DAO的维护变得日益困难,主要表现在这几个方面: 1)dao类的繁多,很多设计都是一个entity对应一个dao (不同的只有类名和方法名) 2)dao接口需要维护的method庞大。 3)业务逻辑...

    C++泛型编程和设计模式应用

    《C++泛型编程和设计模式应用》中可能涵盖了如工厂模式、单例模式、观察者模式等经典设计模式,并讨论了如何在C++中利用泛型编程来优化这些模式的实现。 书中的内容可能会包括以下几个方面: 1. 泛型编程基础:...

    java 一个关于泛型的简单例子

    泛型是Java编程语言中的一个重要特性,它引入于JDK 5.0,极大地提高了代码的类型安全性和可读性。...在实际项目中,泛型广泛应用于集合框架(如List、Set、Map等),以及自定义的数据结构和算法实现中。

    SSH泛型代码实例

    SSH泛型代码实例是关于Java编程中的一种常见技术——Spring、Struts和Hibernate(SSH)框架结合使用泛型的应用示例。泛型是Java SE 5.0引入的一个重要特性,它允许在编译时检查类型安全,并且所有的强制转换都是自动...

    Java源码泛型类的继承应用.rar

    在实际的项目开发中,泛型类的继承应用广泛,特别是在集合框架中,如`ArrayList`、`HashMap`等都是泛型类。通过泛型,我们可以定义泛型接口,实现泛型抽象类,以及在多层继承结构中传递和处理不同类型的对象。 资源...

    WCF中使用泛型效果示例

    在本文中,我们将深入探讨如何在Windows Communication Foundation(WCF)服务中使用泛型,通过具体的示例来阐述这一技术的应用。WCF是.NET框架中的一个关键组件,用于构建分布式应用程序,而泛型则是一种强大的编程...

    顺序存储和链式存储的泛型队列_C语言项目

    在IT领域,数据结构是计算机科学的基础,而队列作为一种重要的数据结构,广泛应用于各种算法和系统设计中。...通过阅读和分析项目中的代码,开发者可以更深入地学习如何在实际应用中设计和实现高效的数据结构。

    泛型封装.rar

    综上所述,"泛型封装.rar"的示例可能涵盖了泛型类、泛型接口、泛型方法以及它们在MVC项目中的实际应用,特别是与数据存储和处理相关的部分。通过深入研究这个例子,开发者可以更好地理解和掌握C#中的泛型技术,提升...

    c# 泛型的使用,教你如何用泛型

    在C#编程语言中,泛型是一种强大的特性,它允许我们编写可重用的代码,同时保持类型安全和性能。泛型是C# 2.0版本引入的新特性,极大地...在实际项目中,你应该根据需求灵活运用泛型,设计出更高效、更健壮的系统架构。

Global site tag (gtag.js) - Google Analytics