泛型是不能被实例化的。所以会存在类型转换异常。
private Class clazz;//clazz中存储了当前操作的类型 public BaseServiceImpl(){ System.out.println("this代表当前调用构造方法的对象"+this); System.out.println("获取当前this对象的父类信息"+this.getClass().getSuperclass()); System.out.println("获取当前this对象的父类信息(包括泛型)"+this.getClass().getGenericSuperclass()); ParameterizedType type=(ParameterizedType)this.getClass().getGenericSuperclass(); clazz=(Class)type.getActualTypeArguments()[0]; }
@Override public void delete(int id) { String hql="DELETE "+clazz.getSimpleName()+" where id=id"; getSession().createQuery(hql).setInteger("id", id).executeUpdate(); }
ModelDriven拦截器:把返回的对象压入栈顶中
必须要实现getModel()方法。用到泛型。
protected T model; @Override public T getModel() { ParameterizedType type=(ParameterizedType)this.getClass().getGenericSuperclass(); Class clazz=(Class)type.getActualTypeArguments()[0]; try { model=(T)clazz.newInstance(); } catch (Exception e) { throw new RuntimeException(e); } return model; }