用于ClassCast的try...catch

简介:

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中还可以用到其它很多类型这个实例的地方,去优化你的代码吧,这样才能使它更健壮,更美丽。



本文转自sucre03 51CTO博客,原文链接:http://blog.51cto.com/sucre/417178,如需转载请自行联系原作者

相关文章
|
6月前
|
C++
C++异常处理try和throw以及catch的使用
C++异常处理try和throw以及catch的使用
try catch finally,try 里面有 return,finally 还执行吗?
try catch finally,try 里面有 return,finally 还执行吗?
70 0
|
6月前
|
Java
你真的了解try catch finally吗?(面试题)
你真的了解try catch finally吗?(面试题)
44 0
16 # 实现 catch 方法
16 # 实现 catch 方法
55 0
|
Web App开发 JavaScript 前端开发
啊,似乎没有真正理解 try...catch...finally!
啊,似乎没有真正理解 try...catch...finally!
490 0
啊,似乎没有真正理解 try...catch...finally!
|
Java 程序员 编译器
技术大佬:我去,你竟然还在用 try–catch-finally
技术大佬:我去,你竟然还在用 try–catch-finally
125 0
技术大佬:我去,你竟然还在用 try–catch-finally
|
架构师 Java 程序员
技术大佬:我去,你竟然还在用 try–catch-finally(2)
技术大佬:我去,你竟然还在用 try–catch-finally
109 0
|
Java 编译器 API
RuntimeException和Exception比较
RuntimeException和Exception比较
533 0
|
C#
C# try catch finally
抛出异常开销非常大(相对而言),所以不要过多的在程序中使用它们 既然finally一定是要执行的,即使try块中有return
873 0