/*
* Copyright 2006 The Android Open Source Project
*/
import java.lang.reflect.Array;
/**
* Test java . lang . reflect . Array .
*/
public class Main {
public static void main(String[] args) {
testSingleInt();
testSingleChar();
testSingleShort();
testSingleLong();
testSingle();
testMultiInt();
testMulti();
testAbstract();
System.out.println("ReflectArrayTest passed" );
}
static void testSingleInt() {
Object intArray;
intArray = Array.newInstance(Integer.TYPE, 2 );
int [] array = (int []) intArray;
array[0 ] = 5 ;
Array.setInt(intArray, 1 , 6 );
if (Array.getInt(intArray, 0 ) != 5 )
throw new RuntimeException();
if (array[1 ] != 6 )
throw new RuntimeException();
try {
array[2 ] = 27 ;
throw new RuntimeException("store should have failed" );
} catch (ArrayIndexOutOfBoundsException abe) { }
try {
Array.setInt(intArray, 2 , 27 );
throw new RuntimeException("store should have failed" );
} catch (ArrayIndexOutOfBoundsException abe) { }
if (array.length != Array.getLength(intArray) ||
array.length != 2 )
{
throw new RuntimeException("bad len" );
}
Integer x123 = Integer.valueOf(123 );
Integer x456 = Integer.valueOf(456 );
Array.set(intArray, 0 , x123);
Array.set(intArray, 1 , x456);
if (!Array.get(intArray, 0 ).equals(x123) || !Array.get(intArray, 1 ).equals(x456)) {
throw new RuntimeException("bad 123 or 456" );
}
int [][] wrongArray;
try {
wrongArray = (int [][]) intArray;
throw new RuntimeException("cast should have failed" );
} catch (ClassCastException cce) { }
intArray = Array.newInstance(Integer.TYPE, 0 );
if (Array.getLength(intArray) != 0 )
throw new RuntimeException();
System.out.println("ReflectArrayTest.testSingleInt passed" );
}
static void testSingleChar() {
Object charArray = Array.newInstance(Character.TYPE, 7 );
char [] array = (char []) charArray;
array[0 ] = '0' ;
array[1 ] = 'W' ;
array[2 ] = '2' ;
array[3 ] = '3' ;
array[4 ] = 'X' ;
array[5 ] = '5' ;
array[6 ] = '6' ;
Array.setChar(charArray, 1 , '1' );
Array.setChar(charArray, 4 , '4' );
try {
Array.setShort(charArray, 3 , (short ) 'Y' );
throw new RuntimeException("shouldn't allow short in char array" );
} catch (IllegalArgumentException iae) {}
try {
Array.setInt(charArray, 5 , 'Z' );
throw new RuntimeException("shouldn't allow int in char array" );
} catch (IllegalArgumentException iae) {}
try {
for (int i = 0 ; i < array.length; i++) {
if (Array.getInt(charArray, i) - '0' != i) {
throw new RuntimeException("mismatch: " + i + " is " + array[i]);
}
}
if (Array.getInt(charArray, 4 ) != '4' ) {
throw new RuntimeException("load should have worked" );
}
} catch (IllegalArgumentException iae) {
iae.printStackTrace(System.out);
}
try {
Array.getByte(charArray, 2 );
throw new RuntimeException("shouldn't allow read of char as byte" );
} catch (IllegalArgumentException iae) {}
Array.setChar(charArray, 3 , (char ) 0 xffff);
try {
if (Array.getInt(charArray, 3 ) != 0 xffff) {
throw new RuntimeException("char got sign-extended? "
+ Array.getInt(charArray, 3 ));
}
} catch (IllegalArgumentException iae) {
iae.printStackTrace(System.out);
}
System.out.println("ReflectArrayTest.testSingleChar passed" );
}
static void testSingleShort() {
Object shortArray = Array.newInstance(Short .TYPE, 1 );
Array.setShort(shortArray, 0 , (short ) -1 );
if (Array.getInt(shortArray, 0 ) != -1 ) {
throw new RuntimeException("short didn't get sign-extended" );
}
Short box = (Short ) Array.get(shortArray, 0 );
System.out.println("ReflectArrayTest.testSingleShort passed" );
}
static void testSingleLong() {
Object longArray = Array.newInstance(Long .TYPE, 2 );
Array.setInt(longArray, 0 , 123 );
Array.setLong(longArray, 1 , 0 x1122334455667788L);
try {
Array.getInt(longArray, 0 );
throw new RuntimeException("shouldn't allow read of long as int" );
} catch (IllegalArgumentException iae) {}
long [] array = (long []) longArray;
if (array[0 ] != 123 || array[1 ] != 0 x1122334455667788L) {
throw new RuntimeException();
}
float f = Array.getFloat(longArray, 0 );
if (f < 122 .9 || f > 123 .1 ) {
throw new RuntimeException("long-as-float failed - " + f);
}
if (Array.getLong(longArray, 1 ) != 0 x1122334455667788L) {
throw new RuntimeException("long1 failed" );
}
System.out.println("ReflectArrayTest.testSingleLong passed" );
}
static void testSingle() {
Object strArray;
strArray = Array.newInstance(String.class , 2 );
String[] array = (String[]) strArray;
array[0 ] = "entry zero" ;
Array.set(strArray, 1 , "entry one" );
try {
Array.set(strArray, 2 , "entry two" );
throw new RuntimeException("store should have failed" );
} catch (ArrayIndexOutOfBoundsException abe) { }
//System.out.println("array: " + array);
if (!"entry zero" .equals(Array.get(strArray, 0 )))
throw new RuntimeException();
if (!"entry one" .equals(array[1 ]))
throw new RuntimeException();
if (array.length != Array.getLength(strArray) ||
array.length != 2 )
{
throw new RuntimeException("bad len" );
}
try {
Array.set(strArray, 0 , new Integer(5 ));
throw new RuntimeException("store of Integer should have failed" );
} catch (IllegalArgumentException iae) {}
System.out.println("ReflectArrayTest.testSingle passed" );
}
static void testMultiInt() {
Object intIntIntArray;
int [] dimensions = { 3 , 2 , 1 };
intIntIntArray = Array.newInstance(Integer.TYPE, dimensions);
int [][][] array3 = (int [][][]) intIntIntArray;
array3[0 ][0 ][0 ] = 123 ; // trouble
array3[2 ][1 ][0 ] = 456 ;
try {
array3[2 ][1 ][1 ] = 768 ;
throw new RuntimeException("store should have failed" );
}
catch (ArrayIndexOutOfBoundsException abe) {
}
System.out.println("ReflectArrayTest.testMultiInt passed" );
}
static void testMulti() {
Object strStrStrArray;
int [] dimensions = { 1 , 2 , 3 };
strStrStrArray = Array.newInstance(String.class , dimensions);
String[][][] array3 = (String[][][]) strStrStrArray;
array3[0 ][0 ][0 ] = "zero zero zero" ;
array3[0 ][1 ][2 ] = "zero one two" ;
try {
array3[1 ][0 ][0 ] = "bad store" ;
throw new RuntimeException("store should have failed" );
}
catch (ArrayIndexOutOfBoundsException abe) {
}
try {
String[][] array2 = (String[][]) strStrStrArray;
throw new RuntimeException("expecting bad cast" );
}
catch (ClassCastException cce) {
}
String[] strar = new String[4 ];
strar[2 ] = "zero one two ++" ;
array3[0 ][1 ] = strar;
System.out.println(array3[0 ][1 ][2 ]);
//System.out.println("array3: " + array3);
int [] dimensions2 = { 1 , 2 };
strStrStrArray = Array.newInstance(String[].class , dimensions2);
array3 = (String[][][]) strStrStrArray;
array3[0 ][1 ] = new String[3 ];
array3[0 ][1 ][2 ] = "zero one two" ;
try {
array3[1 ][0 ][0 ] = "bad store" ;
throw new RuntimeException("store should have failed" );
}
catch (ArrayIndexOutOfBoundsException abe) {
}
System.out.println("ReflectArrayTest.testMulti passed" );
}
static void testAbstract() {
Object arrayOfAbstractClasses = Array.newInstance(Number.class , 1 );
System.out.println(arrayOfAbstractClasses.getClass().toString() + " modifiers: " +
arrayOfAbstractClasses.getClass().getModifiers());
arrayOfAbstractClasses = Array.newInstance(Cloneable.class , 1 );
System.out.println(arrayOfAbstractClasses.getClass().toString() + " modifiers: " +
arrayOfAbstractClasses.getClass().getModifiers());
System.out.println("ReflectArrayTest.testAbstract passed" );
}
}
Messung V0.5 in Prozent C=82 H=93 G=87
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-29)
¤
*© Formatika GbR, Deutschland