您的位置:首页 > 编程语言 > Java开发

注意Java陷阱

2015-09-11 15:38 330 查看
一 deleteCharAt

StringBuilder方法deleteCharAt:在这个序列中的删除指定位置字符,只是一个字符.如下代码,在拼接SQL过程中,删除最后一个”?”或者”,”都是可以的,但是删除最后一个”and”时,只是删除了最后一个”and”的一个字符,即”a” 的位置. 结果变成: select * form tableName where 1=1 nd

可以使用 setLength 替代:stringBuilder.setLength(stringBuilder.length()-“and “.length());

public static String buildSelectSql(final String tableName,final String[] columns
,final String orderByCondition,final String[] wheres)
{
if (CheckValue.valideteNullOrEmpty(tableName)) {
return "";
}
StringBuilder stringBuilder=new StringBuilder(" select ");

if (columns==null||columns.length==0) {
stringBuilder.append(" *");
}
else {

for(String column : columns)
stringBuilder.append(column+",");

stringBuilder.deleteCharAt(stringBuilder.lastIndexOf(","));
}

stringBuilder.append(" from "+tableName);

if (wheres!=null&&wheres.length>0) {
stringBuilder.append(" where ");

for (String where : wheres)
stringBuilder.append(where+"=? and ");

stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("and"));
}

if (orderByCondition!=null&&!orderByCondition.isEmpty()) {
stringBuilder.append(" order by "+orderByCondition);
}

return stringBuilder.toString();

}


二 使用spring注入对象,当出现null对象时,考虑定义上层对象时是否采用spring方式注入.

如下 代码片段:

public class PayService19 implements IPayService {
//方式一 spring注入
@Resource(name="constructPayParams")
private ConstructPayParams constructPayParam;

//方式二 正常创建
private ConstructPayParams constructPayParam=new ConstructPayParams()

//省略其他方法
}


代码片段2 ConstructPayParams

@Component
public class ConstructPayParams {

@Resource(name = "pay19BasicProfile")
private Pay19BasicProfile payBasicProfile;

//省略其他方法
}


如果代码片段1中采用方式二,正常创建ConstructPayParams对象时,则ConstructPayParams类中的payBasicProfile无法被注入,为null,必须采用方式一spring注入方式创建ConstructPayParams对象

三 格式化保留两位小数

//如果为整型,则异常
String.format("%.2f", orderProfile.getAmount()/100.0)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: