Checked exceptions can capture failure scenarios in the type signature. This specialized semantic has fallen out of favor to its unchecked counterpart. This leaves the compiler in the blind on potential failures. Contemporary Java allows us to express possible failures in new and better ways.