如何打印已转换为对象的数组?

时间:2014-11-11 17:43:48

标签: java arrays logging iterable

我有一个接受对象作为输入的记录器,对我来说相当方便。但现在我必须记录int[]类型的输入。我想修改方法,以便正确记录任何数组或Iterable。

在c#中,我要做的是:

int[]data=new int[10];
object tmp=data;

.....

if (tmp is IEnumerable)
{
     StringBuilder _tmp = new StringBuilder();
     foreach (var i in (IEnumerable)tmp)
     {
         if (_tmp.Length > 0)
         {
             _tmp.Append(",");
         }
         _tmp.Append(i);
     }
     var r = _tmp.ToString(); 
 }

我尝试检查int[]Iterable(不是),而不是我尝试使用tmp.getClass().isArray()进行检查,这有效,但现在我无法枚举该数组的成员。我需要一个可以处理任何数组或对象列表的方法。

如何在Java中正确执行此操作?

2 个答案:

答案 0 :(得分:2)

您可以使用java.lang.reflect.Array中的方法

Object obj = new int[] { 1, 2, 3, 4 };
try {
    int len = Array.getLength(obj);
    for (int i = 0; i < len; i++) {
        if (i != 0) {
            System.out.print(", ");
        }
        System.out.print(Array.get(obj, i));
    }
    System.out.println();
} catch (IllegalArgumentException iae) {
    iae.printStackTrace();
}

输出

    1,2,3,4

答案 1 :(得分:0)

在Java(*)中可能没有干净的方法。我认为这会奏效:

Object tmp = ...;

String s;
if (tmp instanceof boolean[]) {
    s = Arrays.toString((boolean[]) tmp);
}
else if (tmp instanceof byte[]) {
    s = Arrays.toString((byte[]) tmp);
}
else ...

char[]double[]float[]int[]long[]short[]执行相同操作;如果isArray()true并且不是上述任何一种情况,

s = Arrays.toString((Object[]) tmp);

编辑:我已对此进行了测试,但确实有效。

请参阅this javadoc以获取可用Arrays.toString方法的列表。

(*)好吧,使用Array.get和另一个答案一样,可能是一个更干净的方法。我已对此进行了测试,也有效。