[英]Cast Object to Array
所以我有一个可能是数组的对象。 它也可以是原始的或字符串。 如果它是一个数组,它可以是一个字面上的任何数组。
我没有问题弄清楚它是否是一个数组,但我似乎无法将它转换为任何我可以迭代以获取值的东西。
// o is an object and clazz is the class of the o
if (clazz == Array.class) {
Class ofArray = o.getClass().getComponentType();
String arrayType = ofArray.getName(); // 'Double' for my test case
//ERROR: [D cannot be cast to [Ljava.lang.Object
Object[] objects = (Object[]) o;
}
我的背景是在ruby和php(它可以正常工作)和静态打字是我的头。 有任何想法吗?
编辑:
这会引发错误
[D cannot be cast to [Ljava.lang.Object.
我错过了什么?
if (o.getClass().isArray()) {
Object[] objects = (Object[]) o;
}
如果你不想为所有原始类型进行切换,你可以这样做:
if (ofArray.isPrimitive()) {
int length = Array.getLength(o);
for (int i = 0; i < length; i++) {
Object obj = Array.get(o, i);
System.out.println(obj);
}
}
else {
Object[] objects = (Object[]) o;
for (Object obj : objects) {
System.out.println(obj);
}
}
编辑:如果您不想在代码中的两个不同位置循环,请使用此方法将原始数组转换为对象数组:
static Object[] convertToObjectArray(Object array) {
Class ofArray = array.getClass().getComponentType();
if (ofArray.isPrimitive()) {
List ar = new ArrayList();
int length = Array.getLength(array);
for (int i = 0; i < length; i++) {
ar.add(Array.get(array, i));
}
return ar.toArray();
}
else {
return (Object[]) array;
}
}
这适用于具有Object
元素的元素的数组:
if (clazz.isArray()) {
Object[] objects = (Object[]) o;
for (Object obj : objects)
System.out.println(obj);
}
如果你需要将数组转换为特定的数组类型,你可以(ab)使用instanceof
但是,例如,只是将内容打印为字符串, Object[]
就足够了。
UPDATE
如果数组是基本类型,你没有选择,只能测试每个数组并转换为正确的类型, Object[]
将不适用于这种情况 - 但Java中没有那么多原始类型,所以它不会是一个巨大的开关:)。 这就是我的意思:
if (clazz.isArray()) {
if (clazz.getComponentType().equals(double.class)) {
double[] numbers = (double[]) o;
for (double d : numbers)
System.out.println(d);
}
}
您不能将一个基元数组类型转换为Object[]
if (clazz == Array.class) {
Class ofArray = o.getClass().getComponentType();
// String arrayType = ofArray.getName(); // 'Double' for my test case
if (ofArray instanceof double.class)
double[] doubles = (double[]) o;
for (double d: doubles)
System.out.println(d);
}
创建没有instanceof
检查的Object[]
if (!(o instanceof Object[])) {
int len = Array.getLength(o);
Object[] objects = new Object[len];
for (int i = 0; i < len; i++)
objects[i] = Array.get (o, i);
for (Object obj: objects)
System.out.println(obj);
}
仅知道您的Object
是一个数组是不够的 - 您还应该知道数组元素的基础类型。 如果你的数组元素是基本类型,比如说double
,你需要
double[] doubleArray = (double[]) o;
这不起作用:
Object[] objects = (Object[]) o;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.