Hi Artem, > > While working a bit on cacio, we just found some new nice addition to the > > Toolkit code, like this one: > > > > public boolean areExtraMouseButtonsEnabled() throws HeadlessException { > > GraphicsEnvironment.checkHeadless(); > > > > return Toolkit.getDefaultToolkit().areExtraMouseButtonsEnabled(); > > } > > > > Of course, this method is meant to be overridden, so it will end up doing > > nothing, but things like this may be very difficult to debug at times, and > > in any case, is definitely are not friendly code. Is there any reason for > > this smartness? > > I completely agree. This code seems to be never called, otherwise it > would fail into an infinite recursion, it shouldn't be any problems with > it returning "false".
Why not make it throw an exception? This way it would be very easy to find out what is wrong. Returning null, false, -1 etc might make your code blow up much later and it takes some debugging to figure out what is wrong. > > Why not simply provide a default implementation or just throw an exception > > or simply make the method abstract? Or maybe I'm missing something? > > Making it abstract is not a good idea: I know some rare cases when the > Toolkit class is extended (e.g. for testing purposes), and adding a new > abstract method will break such code at compile time. Yeah agreed. We are doing this massively in Cacio as you can imagine, and for us would be nicer to have a compile time error so we know what to fix. But I see that java.awt.Toolkit is public API and cannot be changed in a non-compatibel way... Cheers, Roman