- 浏览: 7254102 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
在项目采用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);
}
}
有上面代码可以知道通过使用泛型简化项目中大部分的基本简单操作,提高了代码的重用性和利用率。
发表评论
-
编程的十四条经验
2013-05-06 10:32 1795排列不分先后: 1. 当 ... -
整合Struts2+JasperReport Web报表应用示例
2013-04-22 13:56 2249整合Struts2+JasperReport Web报表应用 ... -
关于H2使用的那些事
2012-12-14 16:40 27079在项目中采用H2作为工 ... -
Java 分割功能实现
2011-08-25 08:39 2744在项目针对比较大的文件需要文件的分割功能,特意写了一个 ... -
反射工具类
2010-04-25 10:47 2352package easyway.tbs.client.bm.u ... -
项目中Hibernate中Criteria和Query查询和模式引用
2010-02-21 15:52 2399在项目中Hibernate中Criteria和Q ... -
json 在项目中开发一个巧妙地应用
2009-12-12 16:49 3866在项目中需要保存客户的信息到Cookie中,因为客户要求 ... -
项目中使用时间工具类
2009-11-21 16:43 2992项目中使用的时间工具类的主要的采用commons-l ... -
将HTML文件转换为图片应用开发
2009-10-21 11:15 4408项目使用的基 ... -
Spring项目的测试用例
2009-08-22 12:49 2290在项目的开发过程中使用Junit4测试代码,使用 ... -
jBPM与Spring整合浅析
2009-08-22 12:41 26321、创建公文流转相关的实体类,并创建数据库表 2、根据对用 ... -
Hibernate正向工程hbm2ddl
2009-08-19 10:14 2261一般在项目开 ... -
Hibernate中用户类型(User Type)应用
2009-08-16 09:08 3094在项目中许多地方使用枚举类,枚举对象值对应数据一个常 ... -
关于常用城市控件中数据的处理方案
2009-08-15 19:41 2366在项目中由于多次使用的国家省份城市的控件,以前采 ... -
在Spring2.5注解时必须注意几点
2009-08-15 19:22 2095项目中采用Spring2.5配置重点内容如下: ... -
中文转换拼音的实现思路以及实现
2009-08-15 18:40 2836在项目中一位大师兄写的中文转换拼音代码:自己整理一下 ... -
在项目中一些相关常量数组使用枚举应用
2009-08-15 18:01 2560在项目中采用Hibernate中支持枚举类型因此我们使用许 ... -
在项目开发中关于Hibernate注解的配置的一些说明
2009-08-15 13:26 4312在项目开发中采用Hibernate3注解方式实现关 ... -
针对项目中XML解析的扩展应用
2009-08-15 12:14 2543由于项目中多个需 ...
相关推荐
当应用中需要使用到上十张表时,DAO的维护变得日益困难,主要表现在这几个方面: 1)dao类的繁多,很多设计都是一个entity对应一个dao (不同的只有类名和方法名) 2)dao接口需要维护的method庞大。 3)业务逻辑...
此实例代码大部分从网上整理而来,因为近期感觉泛型、集合等在ASP.NET web项目中开发还是比较重要的,对提高系统情能很有帮助。
本代码资源是一个关于Java语言中泛型的讲解案例代码。通过使用实际的示例代码,详细讲解了泛型的定义、用法和优势。 适用人群: 有一定Java编程基础的开发者;对泛型概念感兴趣或希望加深理解的学习者。 使用场景...
最近学习反省集合 对次应用所做的一个简单项目
这个Dao层设计模式,是多年来本人总结的经典通用方法的集合,应用hibernate技术,以及java泛型模式,为快速开发项目提供了通用Dao层。文档中有相应测试用例!
当应用中需要使用到上十张表时,DAO的维护变得日益困难,主要表现在这几个方面: 1)dao类的繁多,很多设计都是一个entity对应一个dao (不同的只有类名和方法名) 2)dao接口需要维护的method庞大。 3)业务逻辑...
很简单,适用于初学C#的项目作业,运用各种初级知识,综合的小小项目,没牵扯到数据库。
关于继承和多态的综合简单项目! 运用以前的泛型集合作为基础 在类的基础上添加构造函数以及重载方法
实例122 使用泛型去掉数组中的重复数字 实例123 通过重写虚方法实现加法运算 实例124 使用迭代器实现倒序遍历 实例125 通过泛型查找数组中的元素 第12章 ado.net数据访问技术 实例126 连接加密的access数据库 实例...
本资源是关于Swift编程语言核心技术及实战应用的综合教程,涵盖了Swift语言的基础知识、高级特性以及实际项目开发中的应用实践。资源内容包括课程视频、学习资料和详细的代码示例,旨在帮助学习者全面掌握Swift编程...
采用java 应用程序的方式搭建简单的jdbc项目,JDBC简单入门之枚举(Enum)、泛型、反射、JDBC整合
1、完成“6.5.1枚举基础和应用”中【3、星期枚举类——能给出“星期几”和“周几”的版本】的两个空。 ⑴答:zhou="周"+xq.charAt(2); ⑵答:weeks.getzhou() 2、结合实验专题6的“6.5.6泛型基础”中【1、泛型与集合...
#PHP 与 Oracle 一个小型 Web 应用程序,用于展示如何将 PHP 与 Oracle 连接以及如何创建 CRUD 泛型#Description 一个用 PHP 5 编写的小型 Web 应用程序。 * OO 演示如何连接到 oracle(在本例中为 Oracle 11g x)和...
泛型编程可用于创建可重用的算法和数据结构,这些算法和数据结构在各种不同的应用程序中都可以使用。 C++还支持许多其他特性,如多态性、继承、重载、模板、异常处理和标准模板库。这些功能使得C++成为一种强大的...
泛型编程可用于创建可重用的算法和数据结构,这些算法和数据结构在各种不同的应用程序中都可以使用。 C++还支持许多其他特性,如多态性、继承、重载、模板、异常处理和标准模板库。这些功能使得C++成为一种强大的...
泛型编程可用于创建可重用的算法和数据结构,这些算法和数据结构在各种不同的应用程序中都可以使用。 C++还支持许多其他特性,如多态性、继承、重载、模板、异常处理和标准模板库。这些功能使得C++成为一种强大的...
泛型编程可用于创建可重用的算法和数据结构,这些算法和数据结构在各种不同的应用程序中都可以使用。 C++还支持许多其他特性,如多态性、继承、重载、模板、异常处理和标准模板库。这些功能使得C++成为一种强大的...