java - 使异常信息更丰富

标签 java exception-handling clojure

有没有办法让 Java 异常提供更多信息?

例如,从 ClassCastException 文档中获取这段代码:

Object x = new Integer(0);
System.out.println((String)x);

Java 将给我一个 ClassCastException,其中包含一条消息,如“无法将 Integer 类型的内容转换为 String”。我怎样才能让它说:“不能将整数 0 转换为字符串”呢? 如果我试图将字符串“foo”转换为一个人,让它说:“不能将字符串 foo 转换为一个人”?因此,对于我试图转换的对象的值(value)。

我能否以某种方式用信息量更大的 ClassCastException 替换标准的 ClassCastException,这样我就不必引入大量的 try/catch block ?子类化当然是一种选择,但我将不得不引入大量的 try/catch block 。

我问的原因实际上是因为另一种编译为 JVM 的编程语言 Clojure。

在Clojure中,初学者经常会犯这样的错误:

(def my-list ("foo" "bar"))

这会导致错误消息:

java.lang.String cannot be cast to clojure.lang.IFn

如果初学者看到这样的内容会很有帮助:

java.lang.String "foo" cannot be cast to clojure.lang.IFn

所以他们会得到他们试图在这里使用字符串和函数的线索。

如果能够在学习环境中注入(inject)这些新的异常,而无需实际重写 Clojure 编译器,那就太好了。它可以通过捕获这些类型的异常在 REPL 级别解决。我仍然很好奇这是否可以通过一些巧妙的技术实现。

最佳答案

这个问题在最近的 Clojure Conj 上进行了讨论,并且被普遍认为是编译器中需要解决的问题。在改进堆栈跟踪方面,事后您无能为力,但请放心,您并不是唯一寻求改进的人。

编译器很有可能使构建工具可以使用解析树,使人们能够创建能够解释堆栈跟踪并打印更有意义的消息的工具,尽管这些事情需要时间。

关于java - 使异常信息更丰富,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8138211/

相关文章:

clojure - Clojure 中映射和集合之间的行为不一致

clojure - Clojure 中多个函数调用的错误处理

java - JaCoCo 0.8.4 - 错误 : Could not find or load main class –javaagent:jacocoagent. jar

java - 如何使用 gson 库将字符串转换为 JsonObject

exception - RestEasy ExceptionMapper 没有捕获异常

java - C++和Java中的异常处理之间的区别?

java - 包含小程序的规范方式

Java 弹出框不工作

java - `try/catch`具体是怎么工作的

clojure - 如何每次从重复的函数中获取不同的值?