所以我有一个可能是数组的对象.它也可以是原始的或字符串.如果它是一个数组,它可以是一个字面上的任何数组.
我没有问题弄清楚它是否是一个数组,但我似乎无法把它转换成任何我可以迭代来获取值的东西.
// 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;
}
Run Code Online (Sandbox Code Playgroud)
我的背景是在ruby和php(它可以正常工作)和静态打字是我的头.有任何想法吗?
编辑:
这会引发错误
[D cannot be cast to [Ljava.lang.Object.
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
if (o.getClass().isArray()) {
Object[] objects = (Object[]) o;
}
Run Code Online (Sandbox Code Playgroud)
Veg*_*ard 21
如果你不想为所有原始类型进行切换,你可以这样做:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:如果您不想在代码中的两个不同位置循环,请使用此方法将原始数组转换为对象数组:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37611 次 |
| 最近记录: |