// --------------------
// MemberVariables.java
// --------------------

final class A<T> {                   // extends Object
//  public static       T   sv;      // doesn't compile
    public static       int sv;
    public static       int sv0 = 0;
    public static       int sv1;

//  public static final T   scv;      // doesn't compile
//  public static final int scv;      // doesn't compile
    public static final int scv0 = 0;
    public static final int scv1;

    static {
         sv1 = 1;
        scv1 = 1;}

    public       T   v;
    public       int v0 = 0;
    public       int v1;
    public       int v2;

//  public final T   cv;              // doesn't compile
    public final int cv0 = 0;
    public final int cv1;
    public final int cv2;

    {
        v1  = 1;
        cv1 = 1;}

    public A () {
        v2  = 2;
        cv2 = 2;}

    public T f (T w) {
        return w;}}

final class MemberVariablesTest {
    public static void main (String[] args) {
        System.out.println("MemberVariables.java");

        {
        assert A.sv  == 0;
        assert A.sv0 == 0;
        assert A.sv1 == 1;
        }

        {
        assert A.scv0 == 0;
        assert A.scv1 == 1;
        }

        {
        final A<Integer> x = new A<Integer>();
        assert x.v  == null;
        assert x.v0 == 0;
        assert x.v1 == 1;
        assert x.v2 == 2;
        }

        {
        final A<Integer> x = new A<Integer>();
        assert x.cv0 == 0;
        assert x.cv1 == 1;
        assert x.cv2 == 2;
        }

        {
        final A<Character> x = new A<Character>();
        assert x.f(new Character('a')).charValue() == 'a';
//      assert !x.f(new Character('a')).isInfinite();      // doesn't compile
        }

        {
        final A<Double> x = new A<Double>();
//      assert x.f(new Double(2)).charValue() == 'a';      // doesn't compile
        assert !x.f(new Double(2)).isInfinite();
        }

        System.out.println("Done.");}}


syntax highlighted by Code2HTML, v. 0.9.1