The docs talk about checked exceptions. These are exceptions that extend Exception and not RuntimeException. A checked exception is part of the API as you can not throw a checked exception without defining a throws clause on a method. Also you must use a try catch block when you want to call a method that throws a checked exception (or re-throw the exception). So if an interface declares such a checked exception all implementations of that interface can AT MOST throw this exception or dont throw an exception at all. If the implementation does not throw the exception at all it also does not have to declared it on its method because the interface has already done so.
Example: Imagine a NegativeNumberNotSupportedException extends Exception, so its a checked exception interface Calculator { Integer add(Integer a, Integer b) throws NegativeNumberNotSupportedException; } class DumbCalculator implements Calculator { Integer add(Integer a, Integer b) throws NegativeNumberNotSupportedException { if(a == null || b == null { throw new NullPointerException(); //Not declared at all. Thats allowed because its an unchecked RuntimeException. } if(a < 0 || b < 0) { throw new NegativeNumberNotSupportedException(); //Must be declared, otherwise you cant throw it. You cant throw any other checked exception than NegativeNumberNotSupportedException because the interface denies it. } //do calculation with positive integers } } class IntelligentCalculator implements Calculator { Integer add(Integer a, Integer b) { if(a == null || b == null { throw new NullPointerException(); //Not declared at all. Thats allowed because its an unchecked RuntimeException. } //do calculation and support negative numbers too! No need to throw anything here, so implementation do not have to declare it. The interface has already declared it as part of its public API. } } In contrast to checked exceptions you also have unchecked exceptions that extend from RuntimeException (thats what you have used). These can always be thrown everywhere without declaration (see NullPointerException above). If you declare a RuntimeException in a throws clause then its only for documentation. Typically a RuntimeException represents a state the application can not recover from, so its a truly unexpected exception that typically should not occur at all at runtime. So documentation is not wrong. You just have to differentiate between checked and unchecked exceptions. For checked exceptions you can not declare different exceptions in the implementation, only the one in the interface are allowed to be re-declared in the implementation. Unchecked exceptions don't have to be declared at all and thus Java does not check (hence the naming "unchecked exception") if the declaration makes sense or not or if you use a try catch block or not. Obviously you should never use any concrete implementation of Calculator directly (unless you know what you do) as the Calculator interface defines the type and public API. Typically the Calculator is public while its implementations are package private. -- J. -- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/sogchdHF9FwJ. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.