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
.



Relevant Pages

  • Re: Use of AssertionError
    ... // Use this handler as the class ... Is it more appropriate to put a RuntimeException or other type of error instead of using an AssertionError here? ... The program is in an illegal state, therefore IllegalStateException. ... Client code will not be able to recover from an AssertionError. ...
    (comp.lang.java.programmer)
  • Re: Use of AssertionError
    ... // Use this handler as the class ... Is it more appropriate to put a RuntimeException or other type of error instead of using an AssertionError here? ... The program is in an illegal state, therefore IllegalStateException. ... Client code will not be able to recover from an AssertionError. ...
    (comp.lang.java.programmer)
  • Re: Use of AssertionError
    ... // Use this handler as the class ... Is it more appropriate to put a RuntimeException or other type of error instead of using an AssertionError here? ... The program is in an illegal state, therefore IllegalStateException. ... Client code will not be able to recover from an AssertionError. ...
    (comp.lang.java.programmer)
  • Re: Use of AssertionError
    ... 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: ... // Use this handler as the class ... Where I throw the assertion error explicitly, I want to put an `assert false;' statement in, 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. ...
    (comp.lang.java.programmer)
  • Re: Proper way to create a protocol handler
    ... I chose the second approach because the new protocol ... Your Handler classes must be known to the system-classloader. ... >> public static void initialize ...
    (comp.lang.java.programmer)