注意Java陷阱

一 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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章