java 泛型 设置值_java 泛型的 设置值、取值

public abstract class DaoSupportImpl implements DaoSupport {

@Resource

private SessionFactory sessionFactory;

private Class clazz;

public DaoSupportImpl() {

// 使用反射技术得到T的真实类型

ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass(); // 获取当前new的对象的 泛型的父类 类型

this.clazz = (Class) pt.getActualTypeArguments()[0]; // 获取第一个类型参数的真实类型

System.out.println("clazz ---> " + clazz);

}

/**

* 获取当前可用的Session

*

* @return

*/

protected Session getSession() {

return sessionFactory.getCurrentSession();

}

@Override

public void moveUp(Long id,Long parentId) {

try {

T curT = getById(id); // 当前要移动的对象

Class curClass = curT.getClass();

Field curField= curClass.getDeclaredField("orderFlag");//得到移动标示这个字段

curField.setAccessible(true); //设置些属性是可以访问的

Integer curOrderFlag = Integer.parseInt(curField.get(curT).toString());//得到当前移动标示的值

T otherT=null;

if(parentId!=null){

otherT = (T) getSession().createQuery(// 我上面的那个对象

"FROM "+clazz.getSimpleName()+" obj WHERE obj.orderFlag and obj.parent.id=? ORDER BY obj.orderFlag DESC")//

.setParameter(0, curOrderFlag)//

.setParameter(1, parentId)//

.setFirstResult(0)//

.setMaxResults(1)//

.uniqueResult();

}else{

otherT = (T) getSession().createQuery(// 我上面的那个对象

"FROM "+clazz.getSimpleName()+" obj WHERE obj.orderFlag and obj.parent.id=? ORDER BY obj.orderFlag DESC")//

.setParameter(0, curOrderFlag)//

.setParameter(1, null)//

.setFirstResult(0)//

.setMaxResults(1)//

.uniqueResult();

}

// 最上面的不能上移

if (otherT == null) {

return;

}

Class otherClass=otherT.getClass();

Field otherField=otherClass.getDeclaredField("orderFlag");

otherField.setAccessible(true); //设置些属性是可以访问的

Integer otherOrderFlag = Integer.parseInt(otherField.get(otherT).toString());//得到要移动标示的值

// 交换OrderFlag的值

Integer temp = curOrderFlag;

curField.set(curT, otherOrderFlag);

otherField.set(otherT, temp);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Override

public void moveDown(Long id,Long parentId) {

try {

T curT = getById(id); // 当前要移动的对象

Class curClass = curT.getClass();

Field curField= curClass.getDeclaredField("orderFlag");//得到移动标示这个字段

curField.setAccessible(true); //设置些属性是可以访问的

Integer curOrderFlag = Integer.parseInt(curField.get(curT).toString());//得到当前移动标示的值

T otherT=null;

if(parentId!=null){

otherT = (T) getSession().createQuery(// 我上面的那个对象

"FROM "+clazz.getSimpleName()+" obj WHERE obj.orderFlag>? and obj.parent.id=? ORDER BY obj.orderFlag ASC")//

.setParameter(0, curOrderFlag)//

.setParameter(1, parentId)//

.setFirstResult(0)//

.setMaxResults(1)//

.uniqueResult();

}else{

otherT = (T) getSession().createQuery(// 我上面的那个对象

"FROM "+clazz.getSimpleName()+" obj WHERE obj.orderFlag>? and obj.parent.id=? ORDER BY obj.orderFlag ASC")//

.setParameter(0, curOrderFlag)//

.setParameter(1, null)//

.setFirstResult(0)//

.setMaxResults(1)//

.uniqueResult();

}

// 最上面的不能上移

if (otherT == null) {

return;

}

Class otherClass=otherT.getClass();

Field otherField=otherClass.getDeclaredField("orderFlag");

otherField.setAccessible(true); //设置些属性是可以访问的

Integer otherOrderFlag = Integer.parseInt(otherField.get(otherT).toString());//得到要移动标示的值

// 交换OrderFlag的值

Integer temp = curOrderFlag;

curField.set(curT, otherOrderFlag);

otherField.set(otherT, temp);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}


版权声明:本文为weixin_34634720原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。