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