如何处理一个Java对象,它可能是数组,也可能不是数组,也可能不是原语数组
我正在编写一些与JMX api一起使用的代码。具体地说,我正在使用getAttribute
的MBeanServerConnection
方法
getAttribute
方法的javadocs表示它返回Object
,但我发现,根据MBean的不同,有时它可以返回一个Object
,有时它可以返回一个Object[]
数组
因为我想一致地处理来自getAttribute
的返回,所以我编写了以下代码:
Object attr = mBeanServer.getAttribute(objName, attributeName);
Object[] attributes = new Object[]{};
if (attr.getClass().isArray()) {
attributes = (Object[])attr; // create my array by casting the return from getAttribute
} else {
attributes = new Object[] {attr}; // create my array with just one element
}
for (int i=0; i < attributes.length; i++) {
// deal with each attribute ...
}
希望你能看到这个想法。这可能是一个简单的解决方案,但基本上我想一致地处理来自getAttribute
的返回,不管它是单个Object
还是Object[]
数组
以上作品。。。在大多数情况下。。。但我现在发现了一个例子,其中“getAttribute”返回了一个long
(原语,而不是类)数组。正因为如此,我的演员阵容抛出了一个java.lang.ClassCastException: [J cannot be cast to [Ljava.lang.Object;
我理解这个异常——它不能将long
数组转换为Object
数组——但我不知道如何解决它
我个人认为getAttribute
的方法签名很糟糕!返回“Object”来覆盖几乎所有的东西——一个对象、一个对象数组或一个原语数组——对我来说就像是逃避现实。但这不是我的api,我必须使用它
感谢您对我如何解决这个问题的想法或想法
干杯
内森
# 1 楼答案
这个怎么样
# 2 楼答案
也许有更优雅的解决方案,但你不知道你想用这个属性做什么