将文字数组分配给对象变量
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 中的数据属性?