在我的代码中,我有以下功能:
private static Object formatArg(Object arg)
{
Object formatterArg;
if (arg instanceof Collection)
formatterArg = getFormatter().format((Collection) arg, mFormatters);
else if (arg instanceof Object[])
formatterArg = getFormatter().format((Object[]) arg, mFormatters);
else
formatterArg = getFormatter().format(arg, mFormatters, false);
return formatterArg;
}
问题在于arg instanceof Object[]
。这样做的目的是我想处理int[]
,long[]
和任何基元数组。
问题
是否有可能找出Object
是一个数组,无论哪种类型并将其传递给另一个函数?这应该适用于基本类型的数组以及Objects
的数组...我可以使用arg != null && arg.getClass().isArray()
来检查它Object
是一个数组,但是我不知道知道如何传递它(因为我不能仅仅将int[]
投射到Object[]
......)。实现我想要的任何技巧?
修改
漂亮的解决方案会自动将int[]
转换为Integer[]
,将long[]
转换为Long[]
,依此类推。那些转换后的数组将与我的instanceof Object[]
一起使用,但这意味着我必须手动检查这些原始类型,我可以这样做,但这很难看。有更好的想法吗?
答案 0 :(得分:1)
快速锻炼以获取对象数组
public static void main(String[] args) {
int[] arrInt = {23, 45, 67, 89};
long[] arrLong = {23, 45, 67, 89};
System.out.println(convertarrObj(arrInt));
}
static Object[] convertarrObj(Object arrObj){
if(arrObj.getClass().isArray()) {
Object[] objArray = new Object[Array.getLength(arrObj)];
for(int i = 0; i < Array.getLength(arrObj) ; i++) {
objArray[i] = Array.get(arrObj, i);
}
return objArray;
}
return null;
}
可以很容易地确保返回一个Integer或Long或任何其他类型的数组
static Object[] convertarrObj(Object arrObj){
Object[] objArrayObjects = null;
if(arrObj instanceof Collection)
return null;
else if(arrObj.getClass().isArray()) {
Object firstElement = Array.get(arrObj, 0);
if (firstElement instanceof Integer) {
objArrayObjects = new Integer[Array.getLength(arrObj)];
} else if(firstElement instanceof Long) {
objArrayObjects = new Long[Array.getLength(arrObj)];
}
for(int i = 0; i < Array.getLength(arrObj) ; i++) {
objArrayObjects[i] = Array.get(arrObj, i);
}
}
return objArrayObjects;
}
这背后的逻辑是在原始数据类型和相应类之间自动包装Java。 Determine Type of Primitive data type
答案 1 :(得分:0)