人们经常在有进取心的 Java 程序中看到以下模式
public Something myMethod() throws MyException {
try {
// may throw checked DbException:
Connection c = openDataBase("connectionstring");
// ... other code throwing more checked exceptions ...
} catch(DbException e) {
throw new MyException(e);
}
return something;
}
...或任何其他机制,将方法 header 中未声明的一种已检查异常类型“强制转换”为。通常这个“try-catch-cast” block 必须进入此类的每个方法。
我想知道,如何实现一个注解,捕获并转换异常?
使用代码应该如下所示:
@ConvertException(MyException, DbException)
public Something myMethod() throws MyException {
// may throw checked DbException:
Connection c = openDataBase("connectionstring");
// ...
return something;
}
当然,也许必须写成 MyException.class
或 "MyException"
来代替。还应该可以链接这些注释,或列出多个异常以进行转换。
我的猜测是注释会引入一个包装函数,其中包含调用原始函数的捕获代码块。然后注释将只有编译时保留(而不是运行时保留)。
我不主张这样做是明智的,这可能不是因为这些注释改变了程序语义。 “只是学习”很可能是一个学术问题......
最佳答案
注解本身不会做任何事情。您需要一个工具来评估它们并根据它们进行一些代码更改。
在您的情况下,AspectJ 似乎是最佳匹配。
我的建议是阅读 AspectJ in Action (2nd ed) by Ramnivas Laddad .
从中可以看出 Table of Content ,它包含一个关于异常软化的章节,这几乎正是您想要的。
既然你标记了这个问题 dependency-injection
,假设你使用 Spring,这里是 Spring 自己的 Exception translation mechanism
关于java - 如何通过 Java 注解抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11930218/