15d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao/* 25d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Copyright 2006 The Android Open Source Project 35d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao */ 45d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 55d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaoimport java.lang.reflect.Array; 65d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 75d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao/** 85d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Test java.lang.reflect.Array. 95d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao */ 105d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaopublic class Main { 115d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao public static void main(String[] args) { 125d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao testSingleInt(); 13741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes testSingleChar(); 14741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes testSingleShort(); 15741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes testSingleLong(); 165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao testSingle(); 175d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao testMultiInt(); 185d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao testMulti(); 19513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers testAbstract(); 205d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 215d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("ReflectArrayTest passed"); 225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao static void testSingleInt() { 255d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Object intArray; 265d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 275d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao intArray = Array.newInstance(Integer.TYPE, 2); 285d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 295d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao int[] array = (int[]) intArray; 305d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao array[0] = 5; 315d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Array.setInt(intArray, 1, 6); 325d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 335d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao if (Array.getInt(intArray, 0) != 5) 345d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao throw new RuntimeException(); 355d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao if (array[1] != 6) 365d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao throw new RuntimeException(); 375d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 385d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao array[2] = 27; 395d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao throw new RuntimeException("store should have failed"); 40741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } catch (ArrayIndexOutOfBoundsException abe) { } 41741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes try { 42741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Array.setInt(intArray, 2, 27); 43741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes throw new RuntimeException("store should have failed"); 44741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } catch (ArrayIndexOutOfBoundsException abe) { } 455d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao if (array.length != Array.getLength(intArray) || 465d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao array.length != 2) 475d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao { 485d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao throw new RuntimeException("bad len"); 495d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 505d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 51741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Integer x123 = Integer.valueOf(123); 52741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Integer x456 = Integer.valueOf(456); 53741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 54741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Array.set(intArray, 0, x123); 55741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Array.set(intArray, 1, x456); 56741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes if (!Array.get(intArray, 0).equals(x123) || !Array.get(intArray, 1).equals(x456)) { 57741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes throw new RuntimeException("bad 123 or 456"); 58741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 59741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 605d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao int[][] wrongArray; 615d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 625d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao wrongArray = (int[][]) intArray; 635d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao throw new RuntimeException("cast should have failed"); 64741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } catch (ClassCastException cce) { } 655d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 665d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao intArray = Array.newInstance(Integer.TYPE, 0); 675d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao if (Array.getLength(intArray) != 0) 685d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao throw new RuntimeException(); 695d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("ReflectArrayTest.testSingleInt passed"); 705d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 715d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 72741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes static void testSingleChar() { 73741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Object charArray = Array.newInstance(Character.TYPE, 7); 74741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 75741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes char[] array = (char[]) charArray; 76741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes array[0] = '0'; 77741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes array[1] = 'W'; 78741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes array[2] = '2'; 79741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes array[3] = '3'; 80741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes array[4] = 'X'; 81741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes array[5] = '5'; 82741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes array[6] = '6'; 83741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Array.setChar(charArray, 1, '1'); 84741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Array.setChar(charArray, 4, '4'); 85741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes try { 86741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Array.setShort(charArray, 3, (short) 'Y'); 87741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes throw new RuntimeException("shouldn't allow short in char array"); 88741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } catch (IllegalArgumentException iae) {} 89741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes try { 90741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Array.setInt(charArray, 5, 'Z'); 91741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes throw new RuntimeException("shouldn't allow int in char array"); 92741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } catch (IllegalArgumentException iae) {} 93741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 94741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes try { 95741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes for (int i = 0; i < array.length; i++) { 96741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes if (Array.getInt(charArray, i) - '0' != i) { 97741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes throw new RuntimeException("mismatch: " + i + " is " + array[i]); 98741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 99741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 100741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 101741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes if (Array.getInt(charArray, 4) != '4') { 102741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes throw new RuntimeException("load should have worked"); 103741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 104741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } catch (IllegalArgumentException iae) { 105fa23b1d4c80e92253eeb2da61f5b41b5c34ffb91Elliott Hughes iae.printStackTrace(); 106741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 107741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes try { 108741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Array.getByte(charArray, 2); 109741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes throw new RuntimeException("shouldn't allow read of char as byte"); 110741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } catch (IllegalArgumentException iae) {} 111741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 112741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Array.setChar(charArray, 3, (char) 0xffff); 113741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes try { 114741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes if (Array.getInt(charArray, 3) != 0xffff) { 115741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes throw new RuntimeException("char got sign-extended? " 116741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes + Array.getInt(charArray, 3)); 117741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 118741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } catch (IllegalArgumentException iae) { 119fa23b1d4c80e92253eeb2da61f5b41b5c34ffb91Elliott Hughes iae.printStackTrace(); 120741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 121741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 122741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes System.out.println("ReflectArrayTest.testSingleChar passed"); 123741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 124741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 125741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes static void testSingleShort() { 126741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Object shortArray = Array.newInstance(Short.TYPE, 1); 127741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Array.setShort(shortArray, 0, (short) -1); 128741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes if (Array.getInt(shortArray, 0) != -1) { 129741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes throw new RuntimeException("short didn't get sign-extended"); 130741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 131741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 132741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Short box = (Short) Array.get(shortArray, 0); 133741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 134741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes System.out.println("ReflectArrayTest.testSingleShort passed"); 135741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 136741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 137741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes static void testSingleLong() { 138741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Object longArray = Array.newInstance(Long.TYPE, 2); 139741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Array.setInt(longArray, 0, 123); 140741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Array.setLong(longArray, 1, 0x1122334455667788L); 141741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes try { 142741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Array.getInt(longArray, 0); 143741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes throw new RuntimeException("shouldn't allow read of long as int"); 144741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } catch (IllegalArgumentException iae) {} 145741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 146741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes long[] array = (long[]) longArray; 147741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes if (array[0] != 123 || array[1] != 0x1122334455667788L) { 148741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes throw new RuntimeException(); 149741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 150741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 151741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes float f = Array.getFloat(longArray, 0); 152741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes if (f < 122.9 || f > 123.1) { 153741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes throw new RuntimeException("long-as-float failed - " + f); 154741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 155741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes if (Array.getLong(longArray, 1) != 0x1122334455667788L) { 156741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes throw new RuntimeException("long1 failed"); 157741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 158741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 159741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes System.out.println("ReflectArrayTest.testSingleLong passed"); 160741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } 161741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 1625d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao static void testSingle() { 1635d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Object strArray; 1645d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1655d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao strArray = Array.newInstance(String.class, 2); 1665d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1675d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao String[] array = (String[]) strArray; 1685d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao array[0] = "entry zero"; 1695d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Array.set(strArray, 1, "entry one"); 170741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes try { 171741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Array.set(strArray, 2, "entry two"); 172741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes throw new RuntimeException("store should have failed"); 173741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } catch (ArrayIndexOutOfBoundsException abe) { } 1745d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1755d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao //System.out.println("array: " + array); 1765d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1775d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao if (!"entry zero".equals(Array.get(strArray, 0))) 1785d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao throw new RuntimeException(); 1795d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao if (!"entry one".equals(array[1])) 1805d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao throw new RuntimeException(); 1815d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1825d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao if (array.length != Array.getLength(strArray) || 1835d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao array.length != 2) 1845d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao { 1855d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao throw new RuntimeException("bad len"); 1865d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 187741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes 188741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes try { 189741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes Array.set(strArray, 0, new Integer(5)); 190741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes throw new RuntimeException("store of Integer should have failed"); 191741b5b7ef4c7fd4a786364bbf60d515489caff47Elliott Hughes } catch (IllegalArgumentException iae) {} 1925d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("ReflectArrayTest.testSingle passed"); 1935d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 1945d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1955d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao static void testMultiInt() { 1965d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Object intIntIntArray; 1975d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao int[] dimensions = { 3, 2, 1 }; 1985d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 1995d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao intIntIntArray = Array.newInstance(Integer.TYPE, dimensions); 2005d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao int[][][] array3 = (int[][][]) intIntIntArray; 2015d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 2025d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao array3[0][0][0] = 123; // trouble 2035d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao array3[2][1][0] = 456; 2045d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 2055d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 2065d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao array3[2][1][1] = 768; 2075d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao throw new RuntimeException("store should have failed"); 2085d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2095d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao catch (ArrayIndexOutOfBoundsException abe) { 2105d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2115d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("ReflectArrayTest.testMultiInt passed"); 2125d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2135d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 2145d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao static void testMulti() { 2155d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao Object strStrStrArray; 2165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao int[] dimensions = { 1, 2, 3 }; 2175d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 2185d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao strStrStrArray = Array.newInstance(String.class, dimensions); 2195d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao String[][][] array3 = (String[][][]) strStrStrArray; 2205d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 2215d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao array3[0][0][0] = "zero zero zero"; 2225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao array3[0][1][2] = "zero one two"; 2235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 2245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 2255d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao array3[1][0][0] = "bad store"; 2265d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao throw new RuntimeException("store should have failed"); 2275d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2285d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao catch (ArrayIndexOutOfBoundsException abe) { 2295d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2305d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 2315d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 2325d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao String[][] array2 = (String[][]) strStrStrArray; 2335d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao throw new RuntimeException("expecting bad cast"); 2345d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2355d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao catch (ClassCastException cce) { 2365d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2375d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 2385d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao String[] strar = new String[4]; 2395d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao strar[2] = "zero one two ++"; 2405d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao array3[0][1] = strar; 2415d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println(array3[0][1][2]); 2425d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao //System.out.println("array3: " + array3); 2435d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 2445d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 2455d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao int[] dimensions2 = { 1, 2 }; 2465d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao strStrStrArray = Array.newInstance(String[].class, dimensions2); 2475d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao array3 = (String[][][]) strStrStrArray; 2485d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao 2495d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao array3[0][1] = new String[3]; 2505d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao array3[0][1][2] = "zero one two"; 2515d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao try { 2525d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao array3[1][0][0] = "bad store"; 2535d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao throw new RuntimeException("store should have failed"); 2545d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2555d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao catch (ArrayIndexOutOfBoundsException abe) { 2565d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 2575d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao System.out.println("ReflectArrayTest.testMulti passed"); 2585d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao } 259513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers 260513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers static void testAbstract() { 261513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers Object arrayOfAbstractClasses = Array.newInstance(Number.class, 1); 262513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers System.out.println(arrayOfAbstractClasses.getClass().toString() + " modifiers: " + 263513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers arrayOfAbstractClasses.getClass().getModifiers()); 264513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers arrayOfAbstractClasses = Array.newInstance(Cloneable.class, 1); 265513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers System.out.println(arrayOfAbstractClasses.getClass().toString() + " modifiers: " + 266513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers arrayOfAbstractClasses.getClass().getModifiers()); 267513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers System.out.println("ReflectArrayTest.testAbstract passed"); 268513369cab08636b68e948a8a2dd6ef95bcc99ac6Ian Rogers } 2695d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao} 270