Есть ли способ сделать Java Exceptions более информативным?
Например, возьмите этот код из документов ClassCastException:
Object x = new Integer(0);
System.out.println((String)x);
Java предоставит мне ClassCastException с сообщением типа "Нельзя использовать что-то типа Integer to String". Как я могу заставить его сказать: "Невозможно использовать Integer 0 для строки"? И если я попытался передать String "foo" персонажу, чтобы заставить его сказать: "Невозможно передать String foo персонажу"? Итак, со значением объекта, который я пытался сделать.
Можно ли каким-то образом заменить стандартное ClassCastException более информативным, , поэтому мне не нужно вводить множество try/catch-блоков? Подкласс - это, конечно, вариант, но тогда мне придется вводить множество блоков try/catch.
Причина, по которой я спрашиваю, на самом деле связана с другим языком программирования, который компилируется в 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
чтобы они поняли, что они пытаются использовать строку здесь как функцию.
Было бы неплохо иметь возможность вводить эти новые Исключения для учебной среды, не переписывая при этом Clojure компилятор. Он может быть решен на уровне REPL, но, тем не менее, поймать эти типы исключений. Тем не менее мне интересно, возможно ли это с помощью некоторых отличных приемов.