gpt4 book ai didi

java - 如何处理可能是也可能不是数组、可能是也可能不是基元数组的 Java 对象

转载 作者:行者123 更新时间:2023-11-30 04:32:48 25 4
gpt4 key购买 nike

我正在编写一些与 JMX api 配合使用的代码。具体来说,我正在使用 MBeanServerConnection

getAttribute 方法

javadocs因为 getAttribute 方法说它返回 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 无法转换为 [Ljava.lang.Object;

我理解这个异常 - 它无法将 long 数组转换为 Object 数组 - 但我不知道如何解决它。

就我个人而言,我认为 getAttribute 的方法签名很糟糕!返回“对象”以涵盖几乎所有内容 - 一个对象、一个对象数组或一个基元数组 - 对我来说感觉就像是在逃避。但这不是我的 api,我必须使用它。

您对如何解决这个问题有任何想法或想法吗?

干杯

内森

最佳答案

这个怎么样?

import java.lang.reflect.*;
import java.util.*;

public class ArrayTest
{
public static void main(String[] args)
{
evaluate("Hello");
evaluate(new Boolean[]{Boolean.TRUE, Boolean.FALSE});
evaluate(new int[]{0, 1, 2});
evaluate(null);
}

public static void evaluate(Object object)
{
List<String> primitiveArrayTypes = Arrays.asList(new String[] {
"boolean[]", "byte[]", "char[]", "double[]",
"float[]", "int[]", "long[]", "short[]"
});

if (object == null)
{
System.out.println("Null object.");
return;
}

Class objClass = object.getClass();

if (objClass.isArray())
{
if (primitiveArrayTypes.contains(objClass.getCanonicalName()))
{
System.out.println("Contents of primitive array:");
for (int i = 0; i < Array.getLength(object); i++)
{
System.out.println(Array.get(object, i));
}
}
else
{
System.out.println("Contents of Object array:");
for (Object obj : (Object[]) object) // cast should now always work
{
System.out.println(obj);
}
}
}
else
{
System.out.println("Not an array: " + object);
}
System.out.println("---");
}
}

关于java - 如何处理可能是也可能不是数组、可能是也可能不是基元数组的 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14247234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com