将文字数组分配给对象变量

Posted

技术标签:

【中文标题】将文字数组分配给对象变量【英文标题】: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 中都找不到任何有用的结果(可能是因为搜索中忽略了方括号?)。如果有重复,我错过了,那么请随时关闭我的问题。 为了记录,我检查了以下问题。虽然他们的标题看起来很有希望,但他们都在处理其他类型的问题,或者没有包含我的问题的答案:

Question 1 Question 2 Question 3 Question 4 Question 5 Question 6

【问题讨论】:

【参考方案1】:

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

在 java 8 中,这一行

Object o = ;

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

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

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

【讨论】:

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

以上是关于将文字数组分配给对象变量的主要内容,如果未能解决你的问题,请参考以下文章

如何将从 API 获取的数组分配给 Vue.js 中的数据属性?

将递归函数分配给python中的变量

在 TypeScript 中使用类型变量访问对象文字不起作用

将字符串数组分配给二维字符串数组

将数组分配给 html 数据

如何将 PHP 数组分配给 jQuery 数组? [复制]