我有一个接受对象作为输入的记录器,对我来说相当方便。但现在我必须记录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中正确执行此操作?
答案 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
和另一个答案一样,可能是一个更干净的方法。我已对此进行了测试,也有效。