用反射来排序

本文介绍了如何通过自定义方法获取方法名,并使用此方法名对列表中的元素进行排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public static String getIdString(String id){

 String mehodStr = null;

 if(id!=null){

  char oldChar = id.charAt(0);

  char newChar = (oldChar + "").toUpperCase().charAt(0);

  String temp =newChar + id.substring(1);

  mehodStr = "get" + temp;

 }

 return mehodStr;

}

 

 

 

//排序

final String sortColumn = (String)searchConditions.getCondition("sortColumn");

final String sortOrder = (String)searchConditions.getCondition("sortOrder");

Collections.sort(list, new Comparator(){

public int compare(Object o1, Object o2) {

try {

//得到get方法名

String getMethodName = StringUtil.getIdString(sortColumn);

Class clazz = o1.getClass();

//get方法

Method m3 = clazz.getDeclaredMethod(getMethodName);

//返回值类型

Class returnType  =  m3.getReturnType();

//根据返回值类型进行比较

if(returnType == String.class ){

//调用get方法得到field

String field1 = (String)m3.invoke(o1);

String field2 = (String)m3.invoke(o2);

if(field1 == null)

field1 = "";

if(field2 == null)

field2 = "";

if(sortOrder.equals("asc")){

return field1.compareTo(field2);

}else

return field2.compareTo(field1);

}else if(returnType == Date.class){

Date field1 = (Date)m3.invoke(o1);

Date field2 = (Date)m3.invoke(o2);

if(field1 == null)

field1 = new Date();

if(field2 == null)

field2 = new Date();

if(sortOrder.equals("asc")){

return field1.compareTo(field2);

}else

return field2.compareTo(field1);

}else if(returnType == long.class){

long field1 = (Long)m3.invoke(o1);

long field2 = (Long)m3.invoke(o2);

if(sortOrder.equals("asc")){

return (int)(field1-field2);

}else

return (int)(field2-field1);

}else if(returnType == ResumeStatusType.class){

ResumeStatusType field1 = (ResumeStatusType)m3.invoke(o1);

ResumeStatusType field2 = (ResumeStatusType)m3.invoke(o2);

if(field1 == null)

field1 =  ResumeStatusType.getInstance("1");

if(field2 == null)

field2 = ResumeStatusType.getInstance("1");

if(sortOrder.equals("asc")){

return field1.getCode().compareTo(field2.getCode());

}else

return field2.getCode().compareTo(field1.getCode());

}

} catch (SecurityException e) {

 

       e.printStackTrace();  

   

} catch (NoSuchMethodException e) {

 

       e.printStackTrace();  

   

} catch (IllegalArgumentException e) {

 

       // TODO Auto-generated catch block  

       e.printStackTrace();  

   

} catch (IllegalAccessException e) {

 

       // TODO Auto-generated catch block  

       e.printStackTrace();  

   

} catch (InvocationTargetException e) {

 

       // TODO Auto-generated catch block  

       e.printStackTrace();  

   

}

return 0;

}});

//排序end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值