I really really don't want to see us modifying the class to indicate a different class version. This path seems fraught with peril; this type of "white lie" (actually it's a pretty big lie) seems to me fraught with peril; who knows what other functionality depends on correct versioning of the class file?

David

Andrew McIntyre wrote:

On Jan 24, 2006, at 5:13 PM, Daniel John Debrunner wrote:

Are generics represented by new entries in the class file that break on

older VMs?


This question caught my eye, and I did a little research. The answer is both yes and no.

The bytecode for generics is compatible with older VMs because the generic type signature is erased at compile time and appropriate casts added by the compiler. The new methods could be used in the older VM, but casts which were not expected when the newer class was compiled would result in a ClassCastException. But, attempting to load a class with generics compiled with 1.5/1.6 in a 1.4 JVM yields this error:

Exception in thread "main" java.lang.UnsupportedClassVersionError: Generic (Unsupported major.minor version 49.0)

It is also not possible to compile a class with generics with -target 1.4.

But, you could change the class version so that the class got past the verifier on the earlier VM and it would still work. I even verified that this would work with a simple test case. I haven't had time to look at whether the new methods with generics have counterparts in JDBC 3.0, but assuming they don't, and the JSR-014 charter says that JDBC 4.0 should be backwards compatible with JDBC 3.0, altering the class version would do the trick.

But, then you've entered the dreaded area of modifying class files post-compilation. :-)

Also, I found this document: http://homepages.inf.ed.ac.uk/wadler/gj/Documents/gj-oopsla.pdf very enlightening as to the mechanics of how generic types are handled in the compiler. It was linked from the JSR-014 page.

andrew
begin:vcard
fn:David W Van Couvering
n:Van Couvering;David W
org:Sun Microsystems, Inc.;Database Technology Group
email;internet:[EMAIL PROTECTED]
title:Senior Staff Software Engineer
tel;work:510-550-6819
tel;cell:510-684-7281
x-mozilla-html:TRUE
version:2.1
end:vcard

Reply via email to