欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

对Java泛型的简单理解

发布时间:2025/3/20 java 31 豆豆
生活随笔 收集整理的这篇文章主要介绍了 对Java泛型的简单理解 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

2019独角兽企业重金招聘Python工程师标准>>>

  泛型的定义主要有以下两种:

  • 在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象。(这是当今较常见的定义)

  • 在程序编码中一些包含参数的类。其参数可以代表类或对象等等。(现在人们大多把这称作模板)

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

    泛型只不过是java中的类型而已,继承自Type接口。

    泛型的意义在于:在抽象的时候泛化,在具体的时候细化,在编译的时候就可以决定泛化的值。通俗得讲,可以将泛型看做是类或者接口带了一个参数,这个参数可以在属性、方法的参数、方法的返回值中使用使用。

    ParameterizedType有如下几个方法:

     

     Type[]getActualTypeArguments() 
              返回表示此类型实际类型参数的 Type 对象的数组。
     Type getOwnerType() 
              返回 Type 对象,表示此类型是其成员之一的类型。
     Type getRawType() 
              返回 Type 对象,表示声明此类型的类或接口。

    actualTypeArguments指类的参数

    rawType指带了参数的类或者接口

    了解这些之后,就可以对使用了Hibernate的Dao进行一次CRUD的重构。




    import java.lang.reflect.ParameterizedType; import java.util.Collection; import javax.annotation.Resource; import org.hibernate.Query; import org.hibernate.SessionFactory; /**   * 超类dao实现,专门用于继承   */ @SuppressWarnings ( "unchecked" ) public abstract class BaseDaoImpl<T> implements BaseDao<T> {      //注入会话工厂      @Resource (name= "sessionFactory" )      private SessionFactory sf ;            private Class<T> clazz ;          /**       * 1、this代表该类的子类       * 2、this.getClass().getGenericSuperclass()代表该类       * 3、type.getActualTypeArguments()[0]就是T       * 4、type.getRawType()就是BaseDaoImpl       */          public BaseDaoImpl(){          ParameterizedType type = (ParameterizedType) this .getClass().getGenericSuperclass();          clazz = (Class<T>) type.getActualTypeArguments()[ 0 ];      }      public void saveEntity(T t) {          sf.getCurrentSession().save(t);      }      public void updateEntity(T t) {          sf.getCurrentSession().update(t);      }      public void saveOrUpdateEntity(T t) {          sf.getCurrentSession().saveOrUpdate(t);      }      public void deleteEntity(T t) {          sf.getCurrentSession().delete(t);      }      //批量更新      public void batchEntityByHQL(String hql, Object... objects) {          Query q = sf.getCurrentSession().createQuery(hql);          for ( int i = 0 ; i < objects.length ; i ++){              q.setParameter(i, objects[i]);          }          q.executeUpdate();      }      public T getEntity(Integer id) {          return (T) sf.getCurrentSession().get(clazz, id);      }      public T loadEntity(Integer id) {          return (T) sf.getCurrentSession().load(clazz, id);      }      public Collection<T> findEntityByHQL(String hql, Object... objects) {          Query q = sf.getCurrentSession().createQuery(hql);          for ( int i = 0 ; i < objects.length ; i ++){              q.setParameter(i, objects[i]);          }          return q.list();      } }


    转载于:https://my.oschina.net/tinglanrmb32/blog/370444

    总结

    以上是生活随笔为你收集整理的对Java泛型的简单理解的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。