-
Bug
-
Resolution: Fixed
-
P4
-
1.0.2, 1.1
-
kestrel
-
sparc
-
solaris_2.4
Name: vsC45997 Date: 11/20/96
If I recompile a class containing a final field (not static) with
the new value to which the field is initialized then I cannot obtain
this new value by access to the field from the subclass which was
not recompiled.
The section "13.4.8 final Fields and Constants" of The JLS contains the following:
"If a field is a primitive constant, then deleting the keyword final or
changing its value will not break compatibility with pre-existing
binaries by causing them not to run, but they will not see any new
value for the constant unless they are recompiled."
But the field from my test is not primitive constant because it is
not static. I guess the new value must be provided. If my suggestion
is wrong and an assertion analogous the assertion above should be for
non-primitive constants, it should be written in JLS.
Lets consider my test on binary compatibility.
The test consist of two files.
// FILE: binc01802.java
package javasoft.sqe.tests.lang.binc018.binc01802;
import java.io.PrintStream;
class Super { final char f = 'f'; }
public class binc01802 extends Super {
public static void main(String argv[])
{
System.exit(run(argv, System.out) + 95/*STATUS_TEMP*/);
}
public static int run(String argv[],PrintStream out) {
char s = new Super().f;
out.println(s);
if ( s == 's' )
return 0;
else
return 2;
}
}
// FILE: binc01802a.java
package javasoft.sqe.tests.lang.binc018.binc01802;
class Super { final char f = 's'; }
After separate compilation and execution with -verify option we have
on both 1.0.2 and 1.1 compilers:
javac -d . binc01802.java
javac -d . binc01802a.java
java -verify javasoft.sqe.tests.lang.binc018.binc01802.binc01802
f
======================================================================