> The only behavioural difference from this change should be that failed? will always return a boolean. Otherwise it should work the same. Is this something for JRuby?

nope, it is not JRuby specific, just run ruby with -v option.
But, perhaps, you can add initialization of the field to nil in initialize()?