在开发网站过程中就使用了泛型带来的好处..消除了DAO的重复.
原文:http://www.hibernate.org/328.html.
当然也没有多想就照着做了.减少了代码的重复何乐而不为呢.
知道里面的经典语句:
this.clazz = ((Parameterized)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
这是得到那个参数化类型的.
也有过与别人一样的疑问,为什么不直接用getGenericIntergaces()来得到呢?
后来补了下泛型
Java中的泛型使用了擦除实现.
在泛型代码内部,无法获得任何有关泛型参数类型的信息
也就是说
List list = new ArrayList();
与
List<Integer> list = new ArrayList<Integer>();
在运行时是等价的.
参数类型不像基本类型那样有多态:
也就是说
List<Object> obj = new ArrayList<Integer>();
这样子是不对的.
在Thinking in java中也解答了这个问题:
在数组中为什么可以这样,而在泛型不能这样.
是由于在数组中有个ArraySortException运行异常.
而在泛型中没有这样类似的异常,只能在编译时就检查这种错误.
为什么泛型中不弄个运行异常支持下呢..
我想可能是因为泛型的出现就是为了解决类型安全,所以就不去设计这种异常.有了那样的异常不就还和过去一样了嘛.
----------------------------------------------------------------------
最近要修整网站,又看到了这个泛型DAO,又细细品味下.多了些问题
也看到了过去一篇帖子
http://www.iteye.com/topic/214658
为什么那条经典的语句写在了GenericDaoImp中也能得了参数类型信息.
根据理解应该也在具体的实现才可以啊.
在具体类的构造方法中,得到了超类,然后再得到参数类型.
但现在是写在了GenericDaoImp中也得到了.
其实关键是对getClass()方法的理解.
过去我一直认为这个方法是得到当前类的Class对象.
也就是说,过去认为GenericDaoImp中的getClass就是得到GenericDaoImp的Class
但是看下JDK API
引用
public final Class<?> getClass()
返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。
其实在GenericDaoImp中的getClass就是得到的就是具体子类的Class.
基础太差了吧.....
分享到:
相关推荐
泛型dao,顾名思义就是一个dao可以对多个实体对象进行持久化。当应用中需要使用到上十张表时,DAO的维护变得日益困难,主要表现在这几个方面: 1)dao类的繁多,很多设计都是一个entity对应一个dao (不同的只有类名...
2. **代码复用性**:一个泛型DAO类可以用于处理任何实体类型,大大减少了代码量,提高了代码的可维护性。 3. **灵活性**:能够轻松地扩展功能,如添加新的查询方法,而无需修改大量现有代码。 #### 实现细节 在给...
而泛型DAO是一个类型安全的,代码精简的设计模式(相对于传统DAO),尤其在DAO组件数量庞大的时候,代码量的减少更加明显。 泛型DAO的核心是定义一个GenericDao接口,声明基本的CRUD操作: 用hibernate作为持久化...
使用泛型DAO的一个重要好处是,我们可以在不修改原有代码的情况下,轻松地添加对新实体的支持,因为基础的DAO操作已经实现了。这尤其适用于那些基于ORM(对象关系映射)框架,如Hibernate或MyBatis的项目,它们提供...
泛型DAO是一种设计模式,它通过定义一个通用的DAO接口或抽象类,可以适用于不同的实体类,减少了重复的代码。这种模式的核心在于利用Java的泛型特性,使得DAO方法可以处理任何类型的实体对象,而无需为每个实体类...
本篇文章将深入探讨一个使用Spring注解和Hibernate实现的泛型DAO设计,以提高代码的复用性和可维护性。 首先,`HibernateBaseDao.java`是基础的Hibernate DAO类,它提供了对Hibernate操作的基本封装。这个类通常会...
泛型DAO是一个通用的DAO实现,它使用Java的泛型特性,可以适用于任何继承自特定基类或者实现特定接口的数据实体类。这样,我们只需要编写一次DAO的通用实现,然后在需要的地方通过指定具体的类型即可。 下面是一个...
在泛型DAO中,我们定义一个通用的DAO接口,该接口使用类型参数T表示所操作的数据实体类。例如: ```java public interface GenericDAO, ID> { T save(T entity); void delete(ID id); T findById(ID id); List...
在泛型DAO中,我们可以使用泛型来定义一个通用的DAO接口或类,这个接口或类可以操作任何类型的实体对象,而不是特定的某一种类型。这样做有以下几个显著的优点: 1. **类型安全**:泛型可以确保在编译阶段就检测到...
`GenericDao.txt`可能包含的是关于泛型Dao框架的设计文档或者代码示例,详细解释了如何使用泛型Dao进行数据库操作,可能包括如何定义泛型接口,以及如何创建和使用它的实现类。 `bin`目录通常是编译后生成的Java...
泛型DAO是DAO模式的一种改进,它引入了Java的泛型特性,使得DAO接口或实现类可以支持多种类型的实体类。这大大提高了代码的复用性,减少了重复的代码编写。例如,我们有以下一个简单的泛型DAO接口: ```java public...
1. 创建泛型Dao接口的实现类,继承泛型Dao接口。 2. 使用 Hibernate 的 Session 对象来实现数据访问。 3. 实现泛型Dao接口的方法,例如 create、delete、update、findById 等。 Hibernate 对泛型Dao接口的实现的...
在SSH框架中,我们可以创建一个基础的泛型DAO接口,如`BaseDao<T>`,其中`T`代表任何实体类。这个接口通常包含基本的CRUD(创建、读取、更新、删除)操作,如`save()`, `get()`, `update()`, 和 `delete()`。然后,...
本文将深入探讨如何使用ORMLite在Android中构建一个万能泛型Dao,以实现数据持久化的高效管理。 首先,我们需要理解什么是ORM。ORM是Object-Relational Mapping的缩写,它的主要作用是提供一种机制,将数据库的表格...
* 工具类:泛型可以用于工具类中,例如工具类的静态方法可以使用泛型。 五、结论 泛型是Java编程语言中的一种重要特性,它可以提高代码的灵活性和可读性。通过使用泛型,我们可以编写更加灵活和可维护的代码。此外...
【泛型DAO模型设计】是Java开发中一种高效且可复用的数据访问对象(DAO)设计方式,结合了泛型和反射技术。泛型在Java中引入,旨在提高代码的安全性和可读性,减少类型转换的繁琐过程。DAO设计模式主要用于数据库...
泛型dao,顾名思义就是一个dao可以对多个实体对象进行持久化。当应用中需要使用到上十张表时,DAO的维护变得日益困难,主要表现在这几个方面: 1)dao类的繁多,很多设计都是一个entity对应一个dao (不同的只有类名...
1. 代码重用:一个泛型DAO接口或抽象类可以应用于所有数据实体,减少了大量重复代码。 2. 类型安全:编译时类型检查确保了操作的正确性,避免了强制类型转换错误。 3. 易于扩展:如果需要添加新的数据库操作,只需在...
想象一个基于Spring框架的Java应用程序,其中使用了泛型的DAO层来处理各种实体类的数据操作。在这样的场景下,`GenericUtil`类可以被用来动态获取每个DAO实例所处理的实体类型,进而执行特定于该类型的数据库操作,...