【问题标题】:how to cast java Object to Object[]?java - 如何将java Object转换为Object []?
【发布时间】:2020-01-25 08:16:15
【问题描述】:

如何将 java Object 转换为 java Object[] 或 Integer[] 错误(我无法转换为 [Ljava.lang.Object;);

public class LongestAscendingSumSequence {

    public static void main(String[] ar) {
        int[] arr = { 1, 2, 3, 20, 3, 25, 30, 31, 32, 33, 34 };
        System.out.println(getSum(arr));
        float[] brr = { 1.3f, 2.3f };
        System.out.println(getSum(brr));
        int[] crr = { 1, 2, 3, 20, 3, 25, 30, 31, 32, 33, 34, -2 };
        System.out.println(getSum(crr));

    }

    public static String getSum(Object obj) {
        Object[] objects = (Object[]) obj;

        System.out.println(objects.length);

        return null;
    }
}

得到这个错误

Exception in thread "main" java.lang.ClassCastException: [I cannot be cast to [Ljava.lang.Object;
    at jan25.LongestAscendingSumSequence.getSum(LongestAscendingSumSequence.java:16)
    at jan25.LongestAscendingSumSequence.main(LongestAscendingSumSequence.java:7)

【问题讨论】:

  • ìnt[] 不是Object[],因此例外。在这种情况下,即使协方差也无济于事。如果您使用的是Integer[] 而不是int[],则为would be working
  • 这就是为什么像Arrays.sort这样的各种库函数有一堆原始数组的重载。

标签: java arrays object casting


【解决方案1】:

您正在尝试将原始类型强制转换为 Object,这是不允许的。

对于这种方法,您需要 Wrapper 类。例如:

Integer[] arr = { 1, 2, 3, 20, 3, 25, 30, 31, 32, 33, 34 };
System.out.println(getSum(arr));

Ideone demo

【讨论】:

    【解决方案2】:

    正如其他人指出的那样,您应该在这里使用包装类型,例如 Integer 而不是原始 int。这里发生 classCastException 是因为它试图将原始 int 转换为 Object 类型,并且通过扩大或未经检查的缩小都不能从 int 到达 Object,因为 int 不继承自 Object 类型。

    【讨论】:

      【解决方案3】:

      注意:这不支持计算超出double 范围的总和结果。如果需要,您应该查看 BigDecimal。

      public static <T extends Number>double getSum(T[] tArray) {
          double sum = 0;
          for (T t : tArray) sum = sum + t.doubleValue();
          return sum;
      }
      

      您需要使用Integer[] 而不是int[]

      【讨论】:

      • 无论出于何种原因,我都无法编辑此内容。我忘了注意你需要使用 Integer[] 而不是 int[]
      • 您实际上并没有回答为什么会出现ClassCastException 的问题。
      猜你喜欢
      • 1970-01-01
      • 2013-04-01
      • 2018-01-28
      • 2016-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 2022-01-17
      相关资源
      最近更新 更多