Consider this contrived scenario
public class Outer {
     final int[] x = new int[1];
     class Inner {
         Inner() {
             x[0] = 42;
         }
         int get() {
             return x[0];
         }
     }
}
static Outer.Inner inner;
Thread 1
         Outer outer = new Outer();
         inner = outer.new Inner();
Thread 2
     int r = inner.get();
Behaviour in question: r == 0;
If the reference to the outer class is final, then the behaviour is 
prohibited, otherwise it is permitted. So which should it be?
At 07:48 PM 26/05/2004 -0700, Jerry Schwarz wrote:
>Creating an "as-if" rule is the proper way to proceed. References to 
>this$x are obviously implementation hacks. But the above isn't the right 
>rule.  What programmers need is a guarantee that references to an class 
>always work. That is, they never generate a null pointer. Personally I 
>think this is implicit in the language definition of inner classes and JSR 
>133 doesn't need to say anything about it. But I wouldn't object to some 
>clarification.
>
>If people need more synchronization than that then they should implement 
>it themselves. Saying that the inner class always has a final field has 
>implications for its constructors that we don't need. It associates being 
>an inner class with a property (how it's constructors behave) that doesn't 
>seem to have any relationship to the property of being an inner class.
-------------------------------
JavaMemoryModel mailing list - http://www.cs.umd.edu/~pugh/java/memoryModel
This archive was generated by hypermail 2b29 : Thu Oct 13 2005 - 07:01:08 EDT