>>>>> "Patrick" == Patrick Doyle <[EMAIL PROTECTED]> writes:

Patrick> When a constructor isn't found, Classpath's
Patrick> java.lang.Constructor dutifully throws
Patrick> InstantiationException, as per Sun's library spec.  However,
Patrick> the JDK itself actually throws NoSuchMethodError (not to be
Patrick> confused with NoSuchMethodException).  Kaffe also throws
Patrick> NoSuchMethodError.

Interesting.

What version of the JDK are you using?
JDK 1.2 throws InstantiationException.

Patrick> Technically, Classpath is right, but I'm not sure whether
Patrick> that's more important than matching the behaviour of Sun's
Patrick> JVM.

Tough call.

Patrick> The way to fix it is to catch the NoSuchMethodException from
Patrick> Constructor.newInstance, and (believe it or not) re-throw it as a
Patrick> NoSuchMethodError.  Then Classpath should act just like the JDK.

libgcj throws NoSuchMethodException.  I know we didn't just make this
up, so I tracked it down.  The JCL book says that Class.newInstance
throws NoSuchMethodException if the class does not have a no-arg
constructor.

Oh, well -- another case where Sun's documentation and implementation
are inconsistent and vary randomly across versions.  Yay.  The upshot
is that Java programs can't rely on the behavior.

Tom

_______________________________________________
Classpath mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/classpath

Reply via email to