java一些编程技巧

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));    //指定编码,不要用系统默认编码

 

你可能感兴趣的:(java,编程)