15d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
25d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao/**
35d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Create some objects and store them into an instance field.
45d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao */
55d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaopublic class Main {
65d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    /**
75d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao     * Entry point.
85d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao     */
95d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    public static void main(String[] args) {
105d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        Holder holder = new Holder();
115d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
125d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        Blah blah = new Blah();
135d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
145d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        /* strictly speaking, this should fail */
155d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        holder.mValue = blah;
165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
175d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("Assignment was allowed");
185d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
195d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        /* try to use the reference; should fail */
205d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
215d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            holder.mValue.run();
225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            System.err.println("ERROR: did not get expected ICCE");
235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (IncompatibleClassChangeError icce) {
245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            System.out.println("Got expected IncompatibleClassChangeError");
255d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
265d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
275d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        /* for fun, verify that it's the "alternate" type */
285d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        //Comparable cmpx = holder.mValue;      /* compiler rejects */
295d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        Comparable cmp = (Comparable) holder.mValue;
305d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        cmp.compareTo(cmp);
315d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
325d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("Done");
335d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
345d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao}
35