Suppose my public method readThing() is declared to throw IOException. Someone uses it in a try-catch block. I then revise readThing() to handle the exception and not throw anything. Now they should get a compiler warning that they have an unnecessary catch block that they can remove, and everyone's happy because readThing() became easier to use.

But instead of a compiler warning, they get a compiler error. If I don't wanna break compatibility, I have to keep declaring throws, and anyone using my method has to keep catching.

What's the point of that? Maybe I'm missing something.