
/**
 * Create some objects and store them into an instance field.
 */
public class Main {
    /**
     * Entry point.
     */
    public static void main(String[] args) {
        Holder holder = new Holder();

        Blah blah = new Blah();

        /* strictly speaking, this should fail */
        holder.mValue = blah;

        System.out.println("Assignment was allowed");

        /* try to use the reference; should fail */
        try {
            holder.mValue.run();
            System.out.println("ERROR: did not get expected ICCE");
        } catch (IncompatibleClassChangeError icce) {
            System.out.println("Got expected IncompatibleClassChangeError");
        }

        /* for fun, verify that it's the "alternate" type */
        //Comparable cmpx = holder.mValue;      /* compiler rejects */
        Comparable cmp = (Comparable) holder.mValue;
        cmp.compareTo(cmp);

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