`
从此醉
  • 浏览: 1051791 次
  • 性别: Icon_minigender_1
  • 来自: US
社区版块
存档分类
最新评论

java对异常泛型的简单实例

 
阅读更多

因为泛型具有擦除的特性,所以在现在的java中不支持try{}catch{}的catch子句中不支持对泛型的使用,为了使写的代码在异常的处理方面具有更好的泛型特性,需要在声明类的时候让泛型继承自Exception或者是Throwable,这样在对象进行实例化的时候便可以指定具体的异常类型,下面是异常泛型的小例子


/**
 * Because of erasure, the use of generics with exceptions is extremely limited.
 * A catch clause cannot catch an exception of a generic type, because the exact
 * type of the exception must be known at both compile time and run time. Also,
 * a generic class can’t directly or indirectly inherit from Throwable (this
 * further prevents you from tryi ng to define generic exceptions that can’t be
 * caught). However, type parameters may be used in the throws clause of a
 * method declaration. This allows you to write generic code that varies with
 * the type of a checked exception
 * 
 * @author Eric
 * 
 */
public class ExceptionOfGeneric {
	public static void main(String args[]) {
		ProcessRunner<String, Process1Exception> pr1 = new ProcessRunner<String, Process1Exception>();
		pr1.add(new ProcessImp1());
		try {
			System.out.println(pr1.runnAlllProcess());
		} catch (Process1Exception e) {
			e.printStackTrace();
		}
		ProcessRunner<Integer, Process2Exception> pr2 = new ProcessRunner<Integer, Process2Exception>();
		pr2.add(new ProcessImp2());
		try {
			System.out.println(pr2.runnAlllProcess());
		} catch (Process2Exception e) {
			e.printStackTrace();
		}
	}
}

interface Process<T, E extends Exception> {
	public void process(List<T> t) throws E;
}

class Process1Exception extends Exception {}

class Process2Exception extends Exception {}

class ProcessRunner<T, E extends Exception> extends ArrayList<Process<T, E>> {
	List<T> runnAlllProcess() throws E {
		List<T> results = new ArrayList<T>();
		for (Process<T, E> t : this) {
			// execute process may be throw variable type of exception
			t.process(results);
		}
		return results;
	}
}

class ProcessImp1 implements Process<String, Process1Exception> {
	
	public void process(List<String> strs) throws Process1Exception {
		strs.add("HELLO");
	}
	
}

class ProcessImp2 implements Process<Integer, Process2Exception> {
	
	public void process(List<Integer> t) throws Process2Exception {
		t.add(10);
	}
	
}


分享到:
评论

相关推荐

    Java SE编程入门教程 java泛型(共11页).pptx

    Java SE编程入门教程 java异常(共57页).pptx Java SE编程入门教程 java正则(共8页).pptx Java SE编程入门教程 properties(共3页).pptx Java SE编程入门教程 String字符串(共27页).pptx Java 位运算.docx ...

    JAVA上百实例源码以及开源项目源代码

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java范例开发大全

    实例255 一个关于泛型的简单例子 511 实例256 带两个类型参数的泛型 513 实例257 有界类型程序示例 514 实例258 通配符使用示例 515 实例259 泛型方法使用示例 516 实例260 泛型接口示例 518 实例261 泛型实现坐标...

    JAVA 范例大全 光盘 资源

    第9章 Java异常处理与反射机制 183 实例73 运用throws、throw、try与catch 183 实例74 throws声明异常的实例 185 实例75 自定义异常类 187 实例76 使用finally避免资源漏洞 189 实例77 反射机制 191 第10章 I/...

    常见的Java面试题30题附答案.pdf

    答案:Java中的对象是一个实例,它是一个类的实例。对象是现实世界中实体的抽象,比如人、车、电脑等等。每个对象都有其特定的属性和方法。 3. 什么是Java中的异常处理? 答案:Java中的异常处理是一种机制,用于...

    20道JAVA面试题.docx

    4、Java中的静态变量和实例变量有什么区别? 5、Java中的重载和重写有什么区别? 6、Java中的抽象类和接口有什么区别? 7、Java中的线程是什么? 8、Java中的synchronized关键字有什么作用? 9、Java中的异常是什么...

    Java范例开发大全 (源程序)

     实例47 try…catch…finally捕获异常的实例 67  实例48 try…catch嵌套捕获异常的实例 68  4.4 throws声明异常 69  实例49 throws声明异常实例一 69  实例50 throws声明异常实例二 70  4.5 throw抛出...

    java范例开发大全源代码

     实例47 try…catch…finally捕获异常的实例 67  实例48 try…catch嵌套捕获异常的实例 68  4.4 throws声明异常 69  实例49 throws声明异常实例一 69  实例50 throws声明异常实例二 70  4.5 throw抛...

    Java范例开发大全(全书源程序)

    实例255 一个关于泛型的简单例子 511 实例256 带两个类型参数的泛型 513 实例257 有界类型程序示例 514 实例258 通配符使用示例 515 实例259 泛型方法使用示例 516 实例260 泛型接口示例 518 实例261 泛型...

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java范例开发大全(pdf&源码)

    实例255 一个关于泛型的简单例子 511 实例256 带两个类型参数的泛型 513 实例257 有界类型程序示例 514 实例258 通配符使用示例 515 实例259 泛型方法使用示例 516 实例260 泛型接口示例 518 实例261 泛型实现坐标...

    Java SE编程入门教程 java异常(共57页).pptx

    Java SE编程入门教程 java异常(共57页).pptx Java SE编程入门教程 java正则(共8页).pptx Java SE编程入门教程 properties(共3页).pptx Java SE编程入门教程 String字符串(共27页).pptx Java 位运算.docx ...

    Java开发技术大全(500个源代码).

    differ.java 测试静态方法与实例方法之间的区别 forefather.java 一个简单的基类 grandson.java 上面这个类的子类 hasConstructor.java 拥有构造器的类 hasFinalFun.java 拥有最终方法的类 hasRecall.java ...

    孙卫琴java面向对象编程(答案及源码)

    本书内容包括:面向对象的编程思想、Java语言的基础知识、异常处理、类与对象的生命周期、多线程、Java集合、泛型、Annotation标注、输入/输出和GUI编程,以及JDK8引入的如虎添翼的新特征,比如支持函数式编程的...

    java高手真经 光盘源码

    javaexception.zip 07.Java面向对象编程扩展(计算器异常捕捉实例) 第3部分(5个程序包) javaio.zip 09.Java输入/输出流 javavi.zip 09.Java输入/输出流上机作业参考(文本编辑器) javathread.zip 10.Java多...

    Java高手真经(编程基础卷)光盘全部源码 免积分

    javaexception.zip 07.Java面向对象编程扩展(计算器异常捕捉实例) 第3部分(5个程序包) javaio.zip 09.Java输入/输出流 javavi.zip 09.Java输入/输出流上机作业参考(文本编辑器) javathread.zip 10.Java多...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

     《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第II卷,以开发...

Global site tag (gtag.js) - Google Analytics