Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

why is java.lang.Throwable a class?

In java adjectives ending in -able are interfaces Serializable, Comparable etc... So why is Throwable a class? Wouldn't exception handling be easier if Throwable were an interface? (Edit: e.g. Exception classes don't need to extend Exception/RuntimeException.)

Obviously, changing it now is out the question. But could it be made abstract? Wouldn't that avoid the bad practice of throw new Throwable();

like image 570
mdma Avatar asked May 23 '10 00:05

mdma


People also ask

Is throwable an interface or a class?

The throwable class implements Serializable Interface and the direct known classes to Throwable are Error and Exception. Throwable contains a snapshot of the execution stack of its thread at the time it was created.

Why throwable is a class not interface?

James Gosling: The reason that the Throwable and the rest of those guys are not interfaces is because we decided, or I decided fairly early on. I decided that I wanted to have some state associated with every exception that gets thrown. And you can't do that with interfaces; you can only do that with classes.

Is throwable a subclass of object?

Throwable in Java is a class that is the superclass of all exceptions and errors which may occur in Java program. It extends object class. Therefore, throwable class is itself a subclass of the superclass of all Java classes, Object class.

Is throwable an object?

A throwable object is an instance of class Throwable (or one of its subclasses). Exception and Error are two subclasses of class Throwable , and each has many subclasses itself. From now on, we use the term exception for an object that has been thrown.


1 Answers

Here's how James Gosling explained his decision:

Java Developer Connection Program: Why is Throwable not an interface? The name kind of suggests it should have been. Being able to catch for types, that is, something like try {} catch (<some interface or class>), instead of only classes. That would make [the] Java [programming language] much more flexible.

James Gosling: The reason that the Throwable and the rest of those guys are not interfaces is because we decided, or I decided fairly early on. I decided that I wanted to have some state associated with every exception that gets thrown. And you can't do that with interfaces; you can only do that with classes. The state that's there is basically standard. There's a message, there's a snapshot, stuff like that — that's always there. and also, if you make Throwable an interface the temptation is to assign, to make any old object be a Throwable thing. It feels stylistically that throwing general objects is probably a bad idea, that the things you want to throw really ought to be things that are intended to be exceptions that really capture the nature of the exception and what went on. They're not just general data structures.

References

  • Wayback Machine snapshot/About Java Technology: An Interview with James Gosling
like image 149
polygenelubricants Avatar answered Oct 08 '22 20:10

polygenelubricants