gpt4 book ai didi

java - 使异常信息更丰富

转载 作者:搜寻专家 更新时间:2023-10-30 21:20:54 26 4
gpt4 key购买 nike

有没有办法让 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com