我正在编写一些适用于 JMX api 的代码。具体来说,我正在使用的getAttribute
方法MBeanServerConnection
该方法的javadocsgetAttribute
说它返回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
很烂!返回“对象”以涵盖几乎所有内容——一个对象、一个对象数组或一组原语——对我来说就像一个警察。但它不是我的 api,我必须使用它。
感谢我如何解决这个问题的任何想法或想法?
干杯
弥敦道