【问题标题】:Assign literal array to object variable将文字数组分配给对象变量
【发布时间】:2016-09-18 14:37:56
【问题描述】:

考虑以下代码:

Object obj = {};

这会导致以下错误:

Type mismatch: cannot convert from Object[] to Object

但是,根据 Java 标准every Array is an Object

在 Java 编程语言中,数组是对象(第 4.3.1 节),是动态创建的,并且可以分配给 Object 类型的变量(第 4.3.2 节)。 Object 类的所有方法都可以在数组上调用。

除此之外,下面的 sn-p 编译没有任何问题:

Object [] arr = {};
Object obj = arr;

问题:我在第一个代码示例中遗漏了什么,即为什么它无效?

P.S.:我几乎可以肯定有人已经问过这个问题了,因为它看起来很基础。但是,我在此处和 Google 中都找不到任何有用的结果(可能是因为搜索中忽略了方括号?)。如果有重复,我错过了,那么请随时关闭我的问题。 为了记录,我检查了以下问题。虽然他们的标题看起来很有希望,但他们都在处理其他类型的问题,或者没有包含我的问题的答案:

【问题讨论】:

    标签: java arrays


    【解决方案1】:

    内联数组初始化只能用于数组类型声明——它是语言语法的一部分。

    在 java 8 中,这一行

    Object o = {};
    

    不会给出您报告的编译错误。相反,它给出了:

    此处不允许使用数组初始化器

    数组初始值设定项只能作为数组的初始值出现。

    【讨论】:

    • @TimBiegeleisen:尝试过投射,也不起作用。
    • 你的陈述有参考吗? (这也是我怀疑的,但找不到任何来源来证实。)
    • @Attilio 如有疑问,请查阅 Java 语言规范。我相信你会在那里找到答案。
    • @Jägermeister:我也尝试在 JSL 中进行搜索,但找不到任何明确的内容。我找到的最接近的是Chapter 10.6 Array Initializers 中的以下句子:“每个变量初始化器必须与数组的组件类型赋值兼容(第 5.2 节),否则会发生编译时错误。”由此,我可以推断出Object obj 没有“组件类型”(如果组件类型是我认为的;)),但这个声明对我来说仍然不明确。
    猜你喜欢
    • 2012-07-13
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多