JMX API で動作するコードを書いています。具体的にはのgetAttribute
方法を利用していますMBeanServerConnection
このメソッドのjavadocsには、 が返されると書かれていますが、私が見つけたのは、MBean によっては、 を返すこともあれば、配列を返すこともあるということです。getAttribute
Object
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ではありません。私はそれを使用する必要があります。
これをどのように解決できるかについての考えやアイデアに感謝しますか?
乾杯
ネイサン