Re: how to write array elements to console
"Dzikus" <dzikus_@vp.pl> wrote in message
news:1166003160.908230.256520@80g2000cwy.googlegroups.com...
Hello,
I have following problem:
Let's assume there is a function
f(Object obj){
...
}
And if obj is an array (of some primitive types) I want to write
elements to Sysytem.out
For example if I have:
int[] array = {1, 2, 3, 4};
f(array);
The expected result would be
1
2
3
4
Does anybody knows how to do it?
Here's a solution that does not do any downcasting, nor use any switch
statement. However, it does use an exception for control flow, which is
somewhat frowned upon.
<SSCCE>
import java.lang.reflect.Array;
public class ArrayTest {
public static void main(String[] args) {
f(new int[] { 1, 2, 3 });
f(new byte[] { 4, 5, 6 });
f(new char[] { 'a', 'b', 'c' });
}
public static void f(Object o) throws IllegalArgumentException {
if (!o.getClass().isArray()) {
throw new IllegalArgumentException("Not an array.");
}
int index = 0;
try {
while (true) {
System.out.println(Array.get(o, index));
index++;
}
}
catch (ArrayIndexOutOfBoundsException aioobe) {
// do nothing
}
}
}
</SSCCE>
The issue is that I can't figure out how to get the length of the array
without performing a cast. The following does not work:
o.getClass().getField("length").getInt(o);
It throws a NoSuchFieldException, which surprises me, because I'm pretty
sure arrays have a field called "length". But maybe it has to do with the
fact that arrays are somewhat "magical" and not pure objects?
- Oliver