(3)存取HashMap中的元素。
(4)使用泛形时的几个常见问题:
使用泛形时,泛形类型须为引用类型,不能是基本数据类型
ArrayList
ArrayList
ArrayList
ArrayList list = new ArrayList
18、自定义泛形——泛型方法
(1)Java程序中的普通方法、构造方法和静态方法中都可以使用泛型。方法使用泛形前,必须对泛形进行声明,语法:
public static
(2)练习:
编写一个泛形方法,实现指定位置数组元素的交换。
编写一个泛形方法,接收一个任意数组,并颠倒数组中的所有元素。
(3)注意:
只有对象类型才能作为泛型方法的实际参数。
在泛型中可以同时有多个类型,例如:
public static
/点到任意数组中的指定位置上的两个元素
//[1,2,3] 0 2 [3,2,1]
public static
//缓冲区
T temp = t[index1];
t[index1] = t[index2];
t[index2] = temp;
}
//颠倒任意数组中的元素顺序
//[1,2,3] [3,2,1]
public static
int startIndex = 0;
int endIndex = t.length -1;
while(startIndex T temp = t[startIndex]; t[startIndex] = t[endIndex]; t[endIndex] = temp; startIndex++; endIndex--; } } package com.itheima.base; //把泛型定义在了类上面。但是只对实例方法有效 public class Demo2 // //必须先定义才能使用。定义的语法就是 public T findOne(){ return null; } public void get(Class //静态方法总是需要单独定义泛型类型 public static } 19、自定义泛形——泛型类和反射泛形 (1)如果一个类多处都要用到同一个泛型,这时可以把泛形定义在类上(即类级别的泛型),语法格式如下: public class GenericDao private T field1; public void save(T obj){} public T getId(int id){} } (2)注意,静态方法不能使用类定义的泛形,而应单独定义泛形。 (3)泛形的典型应用:BaseDao和反射泛型 package com.itheima.dao; import java.lang.reflect.ParameterizedType; private Session session; private Class clazz; // this.clazz = clazz; // } //给clazz赋值,知道具体子类的操作对象到底是什么类型的 Class cz = this.getClass();//当前实例对象 //System.out.println(cz.getName()); //得到参数化的类型 ParameterizedType type = (ParameterizedType)cz.getGenericSuperclass();// BaseDao clazz = (Class)type.getActualTypeArguments()[0];//得到第一个实际的泛型参数类型 } public void add(T t) { session.save(t); } session.update(t); } T t = findOne(id); session.delete(t); } return (T)session.get(clazz, id); } package com.itheima.dao; public class BookDaoImpl extends BaseDao package com.itheima.dao; //ProductDao pDao = new ProductDaoImpl(); BookDao bDao = new BookDaoImpl(); } /** * 执行添加实体的功能 * @param t */ void add(T t); /** * 更新记录 * @param t */ void update(T t); /** * 按照主键删除记录 * @param id */ void delete(Serializable id); /** * 按照主键查询一条记录 * @param id * @return */ T findOne(Serializable id); } public interface ProductDao extends Dao //根据条件进行查询 List } /
}
}
import java.io.Serializable;
import org.hibernate.Session;
public class BaseDao
// public void setClazz(Class clazz) {//注入
public BaseDao(){//注入
public void update(T t) {
public void delete(Serializable id) {
public T findOne(Serializable id) {
}
public class Book {
}
package com.itheima.dao;
public interface BookDao extends Dao
}
package com.itheima.dao;
}
public class Client {
public static void main(String[] args) {
}
package com.itheima.dao;
import java.io.Serializable;
public interface Dao
package com.itheima.dao;
public class Product {
}
package com.itheima.dao;
import java.util.List;
//操作产品的dao
package com.itheima.dao;
import java.util.List;
public class ProductDaoImpl extends BaseDao