0.对象的生命周期
boolean offerInSearchWeb = false; //变量定义在不得不声明定义的时候才声明
List<String> offerIdList = offerIds;
if (offerIdList != null) {// p4p中u30340 offer
。。。。。。
}
if (offerInp4p) {
return map;
} else {
。。。。。。
offerInSearchWeb = true; //offerInSearchWeb 只在这里使用,声明可以放到这里,
break;
}
1.异常
public interface CreditService {
public boolean getCreditFlag(String memberId) throws Exception;
}
实现类
。。。。。。
@Override
public boolean getCreditFlag(String memberId) throws Exception{
。。。。。。
try {
。。。。。。
} catch (JSONException jsonException) {
logger.error("Not valid ", jsonException);
throw jsonException;
}
在接口定义中要指定抛出的具体的异常,如果为了让上级调用统一处理就应该向上转型转化为Exception。
public interface CreditService {
public boolean getCreditFlag(String memberId) throws jsonException;
}
抛出的异常没有详细指定抛出的具体异常类型
try {
String urlEncodeCn = URLEncoder.encode(url, "GBK");
return urlEncodeCn;
} catch (Exception e) {
return url;
}
不正确的使用方法:
如果是抛出异常的话
logger.error(e.getMessage());
logger.error("parse mlr categoryInfo error" + e.getMessage());
logger.error("process file fail:" + srcFile, e);
正确的使用方法:
logger.error("getOfferInfoFromBOPS - generate secureKey got exception for " + e.getMessage(), e);
2.内部类
静态内部类
Collections.sort(attributeValueList, new AttriValueComparator());
。。。。。。
private static class AttriValueComparator implements Comparator<Object>,Serializable {
private static final long serialVersionUID = 1L;
@Override
public int compare(Object attriValue1, Object attriValue2) {
。。。。。。
}
}
如果该静态类只调用一次,却只集成一个接口,可以写成 可以使代码更清晰紧凑
Collections.sort(attributeValueList, new Comparator<Object>() {
private static final long serialVersionUID = 1L;
@Override
public int compare(Object attriValue1, Object attriValue2) {
。。。。。。
}
});
3.集合类使用和泛型使用
3.1
List<Sattribute> temp = new ArrayList<Sattribute>();
for(int i = 0;i < temp.size(); i++){
Sattribute attri = new Sattribute();
attri.setId(((Sattribute)temp.get(i)).getId()); //不需要强制转换了
不需要用到编号的时候用下面这种循环,更简洁,性能更好//1、代码上更加简洁。//2、不用考虑边界。//3、不用显示转换类型,定义的时候已经处理。
for(Sattribute sa: temp){
Sattribute attri = new Sattribute();
attri.setId(sa.getId());
}
3.2
for (Iterator itor = offerMolelList.iterator(); itor.hasNext();) { /指定Iterator的类型
OfferModel offerModel = (OfferModel) itor.next();
改为
for (Iterator<OfferModel> itor = offerMolelList.iterator(); itor.hasNext();) { /指定Iterator的类型
OfferModel offerModel = itor.next();
3.3
从list删除另外一个list的所有元素,不要重复劳动
private List<String> getP4pNotBuyWords(List<String> suggestWordsList,List<String> buyedWordsList) {
改为直接使用list的方法
removeAll
4.IO
InputStream is = httpUrlConn.getInputStream();
br = new BufferedReader(new InputStreamReader(is)); //指定编码,不要用系统默认编码