【问题标题】:Parsing Object to Integer将对象解析为整数
【发布时间】:2013-07-20 10:01:21
【问题描述】:

在解析new Objects时,我不明白括号[]在这段代码Integer[]中到底做了什么

 private Integer data[]=(Integer[]) new Object[10];//works fine

 private Integer data[]=(Integer) new Object[10];//error

【问题讨论】:

  • 不是那么简单,你是想在后一个中将一个数组解析为单个对象?

标签: java parsing object integer


【解决方案1】:

private Integer data[]=(Integer) new Object[10]; //I'm a C programmer :)!

等同于:

private Integer[] data=(Integer) new Object[10];

现在您可以更好地看到dataIntegers 的数组

dataInteger[] 类型,如果左侧变量的类型是Integer[],则不能将new Object[10]; 转换为Integer

【讨论】:

  • 谢谢,我认为(Integer) new Object[10];(Integer) 将对应于每个new Object[10]
  • btw Upvote for //I'm a C programmer :)! 即使我没有足够的声誉来执行该操作:)
【解决方案2】:

我会为你读代码:

第 1 行:

  • new Object[10] - 为 Object 实例的 10 个引用创建一个新数组。 完成后,引用全部为空。
  • (Integer []) ... - 告诉编译器它应该假定 Object 引用数组实际上是 Integer 引用数组,即对 Integer 实例的引用数组。
  • private Integer data [] = ... - 将我们刚刚创建的数组保存在一个名为 data 的私有引用变量中,并假设 data 引用一个 Integer 数组。

第 2 行:

  • (Integer) - 告诉编译器对 Object 实例数组进行一个 Integer 引用。那是做不到的,因为没有办法将一个数组变成一个对象。

总结一下:

X [] 中的括号表示对 X 的引用数组

(Y) foo 读取 假设 foo 实际上是 Y 类型的实例

【讨论】:

    【解决方案3】:

    对象数组必须转换为Integer[] 而不是Integer

    【讨论】:

      【解决方案4】:

      您正在尝试在第一种情况下创建data 数组的实例。但是,在第二种情况下,您尝试将数组分配给 Integer,而它期望它是一个数组。

      【讨论】:

        【解决方案5】:

        变量data 的类型是Integer[](整数数组)。如果你使用传统的数组声明风格会更清楚:

        private Integer[] data = ...
        

        因此,第一行将表达式转换为变量的类型 (Integer[]),而第二行将其转换为 Integer,这不是 data 的类型,因此会出现编译错误。

        请注意,第二行虽然可以编译,但没有多大意义。你应该简单地使用

        private Integer[] data = new Integer[10];
        

        【讨论】:

          【解决方案6】:

          它将对象数组转换为整数数组以允许分配。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-05-02
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多