Java泛型(10):泛型与异常
2024-09-02 23:38:10
由于擦除的原因,将泛型运用于异常是非常受限的。catch语句不能捕获泛型类型的异常,因为在编译期和运行期都必须知道异常的确切类型。但是,类型参数可能会在一个方法的throw子句中用到。这使得你可以编写随检查型异常的类型而发生变化的泛型代码。请看下面的例子。
interface Processor<T,E extends Exception> {
void process(List<T> resultCollector) throws E;
} class ProcessRunner<T,E extends Exception> extends ArrayList<Processor<T,E>> {
List<T> processAll() throws 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) throws 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) throws 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<>();
for(int i = 0; i < 3; i++)
runner.add(new Processor1());
try {
System.out.println(runner.processAll()); // [Hep!, Hep!, Ho!]
} catch(Failure1 e) {
System.out.println(e);
}
ProcessRunner<Integer,Failure2> runner2 = new ProcessRunner<>();
for(int i = 0; i < 3; i++)
runner2.add(new Processor2());
try {
System.out.println(runner2.processAll());
} catch(Failure2 e) {
System.out.println(e); // chapter15.class14.Failure2
}
}
}
最新文章
- Si2155
- div中显示页面
- SQL时间相关
- 带有两个输入字段和相关标记的简单 HTML 表单:
- Web语义化
- kibana ,logstash and filebeat
- B/S与C/S区别
- 为什么margin-top不是作用于父元素
- python入门第一天作业。讲师写的代码。
- 【转】VC的MFC中重绘函数的使用总结(整理)
- JavaScript可以这样用
- PHP关于数组缓存JSON、serialize、var_export的说明
- Pots(BFS)
- Linux 添加ssh 公钥访问
- 12、手把手教你Extjs5(十二)执行菜单命令在tabPanel中显示模块
- ==和equals()的区别
- Initialize the shader 初始化着色器
- Membership 介绍
- centos7 docker使用https_proxy 代理配置
- springcloud灰度发布实现方案