try...catch大家都很熟悉吧,没错,就是判断代码是否会抛出异常,然后对其进行捕获,但是有没有想过,用try...catch当作if来使用呢?其实,仔细想想try...catch确实是按照if的流程来走的,只不过是没有else的if,来看个例子吧。

在使用try...catch以前的再做代码

 

  1. public Map getDataMap(String kind,PaginationSupport list){ 
  2.         System.err.println(kind); 
  3.         SortedMap dataMap = new TreeMap(); 
  4.         dataMap.put(0"请选择"); 
  5.         for(int i=0;i<list.getItems().size();i++){ 
  6.             if("year".equals(kind)){ 
  7.                 dataMap.put(Integer.parseInt(((AppXzcf)list.getItems().get(i)).getSubYear()),((AppXzcf)list.getItems().get(i)).getSubYear()); 
  8.             }else if("quarter".equals(kind)){ 
  9.                 dataMap.put(Integer.parseInt(((AppXzcf)list.getItems().get(i)).getSubJd()),((AppXzcf)list.getItems().get(i)).getSubJd()); 
  10.             } 
  11.         } 
  12.         for (int i = 0; i < dataMap.size(); i++) { 
  13.             System.out.println(dataMap.get(DateUtil.getYear() - 5 + i)); 
  14.             if(dataMap.get(DateUtil.getYear() - 5 + i+1)!=null&&dataMap.get(DateUtil.getYear() - 5 + i+1).equals(dataMap.get(DateUtil.getYear() - 5 + i))){ 
  15.                 System.out.println("===="+i); 
  16.                 dataMap.remove(DateUtil.getYear() - 5 + i); 
  17.             } 
  18.         } 
  19.         return dataMap; 
  20.     } 

 

  1. public Map getCityDataMap(String kind,PaginationSupport list){ 
  2.         System.err.println(kind); 
  3.         SortedMap dataMap = new TreeMap(); 
  4.         dataMap.put(0"请选择"); 
  5.         for(int i=0;i<list.getItems().size();i++){ 
  6.             if("year".equals(kind)){ 
  7.                 dataMap.put(Integer.parseInt(((AppXzcfCollect)list.getItems().get(i)).getSubYear()),((AppXzcfCollect)list.getItems().get(i)).getSubYear()); 
  8.             }else if("quarter".equals(kind)){ 
  9.                 dataMap.put(Integer.parseInt(((AppXzcfCollect)list.getItems().get(i)).getSubJd()),((AppXzcfCollect)list.getItems().get(i)).getSubJd()); 
  10.             } 
  11.         } 
  12.         for (int i = 0; i < dataMap.size(); i++) { 
  13.             System.out.println(dataMap.get(DateUtil.getYear() - 5 + i)); 
  14.             if(dataMap.get(DateUtil.getYear() - 5 + i+1)!=null&&dataMap.get(DateUtil.getYear() - 5 + i+1).equals(dataMap.get(DateUtil.getYear() - 5 + i))){ 
  15.                 System.out.println("===="+i); 
  16.                 dataMap.remove(DateUtil.getYear() - 5 + i); 
  17.             } 
  18.         } 
  19.         return dataMap; 
  20.     } 

看到了吗?再做代码只有几行是不一样的,其它的都是一样的,主要是这两个方法用到的是不同的实体类,如果要用到try...catch,会精简很多代码,如下

 

  1. public Map getDataMap(String kind,List list){ 
  2.         SortedMap dataMap = new TreeMap(); 
  3.         dataMap.put(0"请选择"); 
  4.         for(int i=0;i<list.size();i++){ 
  5.             if("year".equals(kind)){ 
  6.                 try
  7.                     dataMap.put(Integer.parseInt(((AppXzcf)list.get(i)).getSubYear()),((AppXzcf)list.get(i)).getSubYear()); 
  8.                 }catch (ClassCastException e) { 
  9.                     dataMap.put(Integer.parseInt(((AppXzcfCollect)list.get(i)).getSubYear()),((AppXzcfCollect)list.get(i)).getSubYear()); 
  10.                 } 
  11.             }else if("quarter".equals(kind)){ 
  12.                 try
  13.                     dataMap.put(Integer.parseInt(((AppXzcf)list.get(i)).getSubJd()),((AppXzcf)list.get(i)).getSubJd()); 
  14.                 }catch (ClassCastException e) { 
  15.                     dataMap.put(Integer.parseInt(((AppXzcfCollect)list.get(i)).getSubJd()),((AppXzcfCollect)list.get(i)).getSubJd()); 
  16.                 } 
  17.             } 
  18.         } 

看到了吧,这就是差别所在,try...catch不光可以用在ClassCastException中还可以用到其它很多类型这个实例的地方,去优化你的代码吧,这样才能使它更健壮,更美丽。