Consider the following function:
(defn clone [x]
(try (.clone x)
(catch CloneNotSupportedException _ ...)))
If the arg implements Cloneable, it works, but the call is reflective. If it doesn't, then it fails with java.lang.IllegalArgumentException: No matching field clone for class ....
I can get it to work by catching Exception instead, but it feels wrong :(
Any suggestions?