客户那出现的bug
public class TmJobInfoDto extends AbstractDto {
private String flag;
private int attr=0;
......
public void setFlag (String flag){
if(this.attr==1){
this.flag="1";
}
this.flag=“0”
}
public void setAttr (int attr){
this.attr=attr
}
......
}
protected List<AbstractDto> executeRefer(String sql, Map<String, Object> param,
final AbstractDto columnValue){
ParameterizedRowMapper<AbstractDto> mapper = new ParameterizedRowMapper<AbstractDto>() {
@SuppressWarnings("unchecked")
public AbstractDto mapRow(ResultSet rs, int rowNum) throws SQLException{
Object dto = null;
try{
...............
Method[] methodAll = dto.getClass().getMethods();
for(Method setMethod: methodAll){
String fldName = (String) colNameMap.get(setMethod.getName());
if(fldName != null){
Class[] paramType = setMethod.getParameterTypes();
String type = paramType[0].getName();
if(STRING.equals(type)){
setMethod.invoke(dto, rs.getString(fldName) == null ? rs
.getString(fldName) : rs.getString(fldName).trim());
}else if(INT.equals(type)){
setMethod.invoke(dto, rs.getInt(fldName));
}
}
}
}catch(Exception e){
}
return((AbstractDto) dto);
}
};
LogWriter.debug("EXECUTING SQL: ");
LogWriter.debug(sql);
return template.query(sql, mapper, param);
数据库查询出的结果rs中 attr 的值为1.所以这时flag也应该为1. 但getMethods();得出的结果是无序的,导致executeRefer里的函数先调用了setFlag 这时(attr还是0),后调用setAttr 。 这个问题怎么解决?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
如果单单这个class的话,你可以使用Arrays.sort(methodAll)方法排序一下试试,setAtrr在setFlag前,如果要一个通用的,需要灵活配置的,你需要开发个自定义注解之类的,在注解上定义调用顺序,写一个排序方法,按照注解的value来排序