Use of AssertionError
Having just read the
NullPointerException-IllegalArgumentException-AssertionError thread, I
was just wondering if my use of AssertionError in one case was valid.
This is a very pared-down interface of the code:
import java.util.*;
public final class ClassPool {
public interface SourceHandler {
public boolean hasClass(String name);
}
private static List<SourceHandler> handlers =
new LinkedList<SourceHandler>();
static {
// add a few handlers to the list...
handlers.add(new SourceHandler() {
public boolean hasClass(String name) {
return true;
}});
// This is not really an anonymous inner class, but it is the
// best way for me to make it compilable
}
// The user can add handlers but can never remove them.
public static void addHandler(SourceHandler handler) {
handlers.add(0, handler);
}
// Edited for simplicity
public static void getClass(String name) {
for (SourceHandler handler : handlers) {
if (handler.hasClass(name))
return; // Use this handler as the class
}
// Since our last handler claims to handle everything, we should
// never get here.
throw new AssertionError();
}
}
Where I throw the assertion error explicitly, I want to put an `assert
false;' statement in (with a comment, of course), but then I would need
to insert a `return null;' at the end of the method, which would
invalidate the method contract which forbids null as a result but
assertions may not be on.
Is it more appropriate to put a RuntimeException or other type of error
instead of using an AssertionError here?
--
Beware of bugs in the above code; I have only proved it correct, not
tried it. -- Donald E. Knuth