【发布时间】:2016-12-01 07:39:14
【问题描述】:
在我的代码中某处我有以下功能:
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[] 一起使用,但这意味着我必须手动检查这些原始类型,我可以这样做,但这很难看。有更好的想法吗?
【问题讨论】:
-
getFormatter()返回什么类型? -
int[] 和其他原始类型不是对象数组,因此类型转换本身会失败。您必须先将它们转换为 Integer[] 或 Long[]
-
我知道(我什至在我的问题中使用了这个功能!)。但是我不能自动将
int[]转换为Integer[],然后我可以将其交给我的格式化程序。因此,我必须一个一个地处理所有原始类型,这并不难,但我想避免它,也许有人知道一个漂亮的解决方案 -
"因为我不能只将 int[] 转换为 Object[]" - 似乎您需要原始数组
format(int[], ...)的格式特化等等。