rid*_*rid 5 java reflection primitive wrapper
如果我有一个原始包装类的实例数组,我如何获得它们各自的原始数组?
Object toPrimitiveArray(Object[] wrappedArray) {
return ?;
}
Object primitiveArray = toPrimitiveArray(new Integer[] { 1, 2, 3 });
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,我想toPrimitiveArray()返回int[]包含int值1、2和 的3。
问题是您的方法无法知道数组包含什么类型的 Number,因为您仅将其定义为 Object 数组,没有进一步的信息。因此,不可能在不失去编译时类型安全性的情况下自动生成原始数组。
您可以使用反射来检查对象类型:
if(obj instanceof Integer) {
//run through array and cast to int
} else if (obj instanceof Long) {
//run through array and cast to long
} // and so on . . .
Run Code Online (Sandbox Code Playgroud)
然而,这很丑陋,并且不允许编译器检查代码中的类型安全性,因此增加了出错的机会。
您可以改用数字对象列表而不是数组吗?然后您可以使用类型参数(泛型)来保证类型安全。