泛型中的异常处理
来源:互联网 发布:域名与二级域名 编辑:程序博客网 时间:2024/06/06 19:47
由于存在类型擦除,泛型中异常的处理受到限制。由于异常的类型必须在编译或运行时,确切知晓,否则,异常无法被捕获。泛型类型通常不能直接的或者间接的继承Throwable,这进一步阻止了你处理不能被捕获的异常。
尽管如此,类型参数还是被用在方法声明的异常语句中的,他允许你通过检查类型信息来写泛型的代码
interface Processor<T,E extends Exception>{
void process(List<T> resultCollector) throw E;
}
class ProcessRunner<T,E extends Exception> extends ArrayList<Processor<T,E>>{
List<T> processAll() throw E{
List<T> resultCollector = new ArrayList<T>();
for(Processor<T,E> processor:this)
processor.process(resultCollector);
return resultCollector;
}
}
class Failure1 extends Exception{}
class Processor1 implements Processor<String,Failure1>{
static int count = 3;
public void process(List<String> resultCollector) throw Failure1{
if(count-->1){
resultCollector.add("Hep");
}else{
resultCollector.add("Ho");
}
if(count<0)
throw new Failure1();
}
}
class Failure2 extends Exception{}
class Processor2 implements Processor<Integer,Failure2>{
static int count = 2;
public void process(List<Integer> resultCollector) throw Failure2{
if(count-- == 0){
resultCollector.add(47);
}else{
resultCollector.add(11);
}
if(count<0)
throw new Failure2();
}
}
public class ThrowGenericException{
public static void main(String[] args){
ProcessRunner<String,Failure1> runner = new ProcessRunner<String,Failure1>();
for(int i=0;i<3;i++)
runner.add(new Precessor1());
try{
System.out.println(runner.processAll());
}catch(Failure1 e){
System.out.println(e);
}
ProcessRunner<Integer,Failure2> runner2 = new ProcessRunner<Integer,Failure2>();
for(int i=0;i<3;i++)
runner2.add(new Proccesor2());
try{
System.out.println(runner2.processAll());
}catch(Failure2 e){
System.out.println(e);
}
}
}
Processor类执行process()方法可能抛出exception E,process()的结果是存储数据到List<T> resultCollector(这也叫集合参数)。ProcessRunner有一个processAll方法可以执行每一个它所持有的对象,然后返回结果。如果你不能把抛出的异常参数化,由于异常检查机制你将不能够写泛型的异常处理代码。
- 泛型中的异常处理
- Java中的String字符串,异常处理,和泛型
- Java中的异常处理
- C++中的异常处理
- javascript 中的异常处理
- c#中的异常处理
- JAVA中的异常处理
- javascript中的异常处理
- Java中的异常处理
- C++中的异常处理
- C#中的异常处理
- Symbian中的异常处理
- DAO 中的异常处理
- ORACLE中的异常处理
- JAVA中的异常处理
- javascript 中的异常处理
- struts2中的异常处理
- struts2中的异常处理
- 多种办法用EXCEL软件生成99乘法表
- 《深入解析Oracle》学习笔记(5)---Oracle数据字典
- MYSQL存储过程
- 操作Excel的例子
- 工作之余
- 泛型中的异常处理
- To configure IMAP for your Symbian S60 device
- Dlg添加背景图片
- colorschememapping
- 操作系统开发系列——Bootloaders
- jstl 常用方法
- SQL自动编号 通过select生成自增长列的办法 应用在各种SQL排名中
- 【甜屋- The Sweety House】存在的bug与缺陷
- 最近使用存储过程的一定小东西总结下