以下代码有什么问题?
Object[] a = new Object[1];
Integer b=1;
a[0]=b;
Integer[] c = (Integer[]) a;
Run Code Online (Sandbox Code Playgroud)
代码在最后一行有以下错误:
线程"main"中的异常java.lang.ClassCastException:[Ljava.lang.Object; 无法转换为[Ljava.lang.Integer;
是否有一种优雅的方法将基元数组转换为相应容器对象的数组 - 例如,将a byte[]转换为a Byte[]?还是我坚持循环并手动完成?
是的,for循环并不是很困难.只是有点难看.
所以我有一个可能是数组的对象.它也可以是原始的或字符串.如果它是一个数组,它可以是一个字面上的任何数组.
我没有问题弄清楚它是否是一个数组,但我似乎无法把它转换成任何我可以迭代来获取值的东西.
// 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) 我有两个函数来检查数组或列表的所有元素是否都是true.我把两者结合起来遇到了麻烦.如何将函数转换为一个通用Java函数.
public static boolean allTrue(boolean[] booleans) {
if (booleans == null) {
return false;
}
for (boolean bool : booleans) {
if (!bool) {
return false;
}
}
return true;
}
public static boolean allTrue(List<Boolean> booleans) {
if (booleans == null) {
return false;
}
for (boolean bool : booleans) {
if (!bool) {
return false;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)