漂亮的打印数组对象,而不是对象数组?
问题描述:
所以,我已经发现漂亮的打印数组对象,而不是对象数组?
Arrays.toString(arr);
所以不要点我this question。
我的问题只是有点不同。在这种情况下,我没有一个本地数组指针指向有问题的数组。我把它作为一个Object指针,它可以是任何类型的数组(原始或其他)。在这种情况下,我可以通过将Object指针强制转换为Object []来使用上面的toString()方法。但是,如果指针是一个基本数组,它将引发运行时异常并崩溃。所以?
例子:
double test[] = {1, 2, 3, 4};
Object t = test;
// Now how do I pretty print t as an array with no access to test?
我解决我的问题与此:
public String unkObjectToString(Object o) {
if(!o.getClass().isArray()) return o.toString();
int len = Array.getLength(o);
String ret = "[";
for(int i = 0; i < len; i++) {
Object q = Array.get(o, i);
ret += unkObjectToString(q);
if(i == len - 1)
ret += "]";
else
ret += ", ";
}
return ret;
}
答
您必须测试和演员。
if (o instanceof byte[]) {
return Arrays.toString((byte[]) o);
} //etc.
你可以通过反射来做到这一点,但最终不会有任何更清洁的东西,尽管它可能少了几行代码。
我向编程的神圣之神祈祷,这可以避免,而StackOverflow是我的最后一招。我现在会执行这种可憎的事,但知道我的灵魂随着即将到来的承诺而被提到地狱的深处。和平,你,兄弟。 *致敬* – Jordan 2010-06-30 20:19:29
抛开戏剧,为什么这么打扰你呢? 10行额外的代码足以让你觉得你失去了你的无辜?这些原语不是对象是Java中的核心现实。如果这让你感到困扰,那么,克服它,或选择另一种语言。 – 2010-06-30 20:33:39
它主要困扰我,因为我正在工作的代码具有if-else链的公平份额,1000行可能很容易被避免,但现在已经在项目中根深蒂固,我希望避免添加链接链。我用一个递归函数修正它(以帮助嵌套数组),类似于Bozho的库函数。我会将这个函数加入到我的问题中以供参考和批评。 – Jordan 2010-06-30 20:48:14