Java 泛型在实际开发中的应用(2)

List<TaclUserinfo> list = calcPage(hqluser1.toString(), pageContext, taclRole.getRoleid(), taclRole.getTenantId()); //返回值类型 是<T>List<T>的,j接收的时候,我直接用List<具体类>

3 :类或者接口使用泛型  interface Collection<V> {..}

  上边的HashMap代码中,也看到了在类上使用泛型的具体例子。在真正的项目上,一些基础的公共类经常定义泛型,如下:

1 public interface GenericDao<T, ID extends Serializable> { 2 3 public abstract void saveOrUpdate(T t) throws DataAccessException; 4 5 public abstract T get(ID id) throws DataAccessException; 6 7 public abstract List<T> query(String queryString) throws DataAccessException; 8 9 public abstract Serializable save(T t) throws DataAccessException; 10 11 public abstract void saveOrUpdateAll(Collection<T> entities) throws DataAccessException; 12 13 public abstract List<T> loadAll() throws DataAccessException; 14 15 public abstract void merge(T t) throws DataAccessException; 16 17 }

接口的实现类: 传入参数为T,实现类中也可以继续用T,返回为T也可以用T;实现的时候 可以用 extends限定泛型的边界。

public abstract class GenericDaoImpl<T extends BaseEntity, ID extends Serializable> extends HibernateDaoSupport implements GenericDao<T, ID> { public void merge(T t) throws DataAccessException { TenantInterceptor.setTenantInfoToEntity(t); getHibernateTemplate().merge(t); } public T get(ID id) throws DataAccessException { // getHibernateTemplate().setCacheQueries(true); T load = (T) getHibernateTemplate().get(getEntityClass(), id); return load; } }

具体使用的时候:

public class UserDao extends GenericDaoImpl<User, Serializable> { ...//比如get() merge()这些方法不需要在单独编写,直接调用 }

4:  声明带边界的泛型   class userDao<T extends BaseEntity>

  Java中泛型在运行期是不可见的,会被擦除为它的上级类型。如果你是无界的泛型参数类型,就会被替换为Object. 

public class RedColored<T extends Color> { public T t; public void color(){ t.getColor();//T的边界是Color,所以可以调用getColor(),否则会编译报错 } } abstract class Color{ abstract void getColor(); }

  类似这样的定义形式:GenericDaoImpl<T extends BaseEntity, ID extends Serializable> ,java重载了extends,标注T的边界就是BaseEntity。如果需求是继承基类,那么边界定义在子类上

类似 

class Colored2<T extends Color> extends RedColor<T>

5:用于通配符  <?>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/be959c8316866dd81eeaa284fd882a77.html