java.lang.ArrayStoreException:在为Object [] array 赋值不正确的值时
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java.lang.ArrayStoreException:在为Object [] array 赋值不正确的值时,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1473字,纯文字阅读大概需要3分钟。
内容图文
![java.lang.ArrayStoreException:在为Object [] array 赋值不正确的值时](/upload/InfoBanner/zyjiaocheng/718/814751353b9348bfb41991efca5d9cce.jpg)
参见英文答案 > Why are arrays covariant but generics are invariant? 8个
我来自C背景.我无法在foo()中将对象添加到Object []中.
我希望函数foo中的代码在运行时工作,但是当我尝试执行字符串[0] .toLowerCase()时,在main()中失败.因为strings [0]中的对象不是String,而实际上是一个没有toLowerCase()的StringBuilder.在一天结束时,我将指针存储到指针数组中,并且行对象[0] =其他不应该无效.很明显,我对java的理解是错误的(但我现在还是一个相当新的).
class Main {
static void foo(Object[] objects, Object other) {
objects[0] = other;
}
public static void main(String[] args) {
String[] strings = { "stringValue" };
foo(strings, new StringBuilder());
}
}
编辑:谢谢大家的答复.由于@Andy Turner,我用谷歌搜索了“数组的java协方差”并且遇到了this,它讨论了这种行为.诀窍是编译器和运行时以非常不同的方式处理代码.编译器对代码很好,运行时没有.
解决方法:
从ArrayStoreException的documentation:
Thrown to indicate that an attempt has been made to store the wrong type of object into an array of objects. For example, the following code generates an ArrayStoreException:
Object x[] = new String[3];
x[0] = new Integer(0);
只是因为你将String []传递给一个期望Object []的方法并不意味着它实际上是一个Object [].因为你创建了一个String [],所以你只能向它添加String实例,并且你正在尝试添加一个没有意义的StringBuilder.
注意如果将String []的类型更改为Object [],它不会抛出异常:
public static void main(String[] args) {
Object[] strings = { "stringValue" };
foo(strings, new StringBuilder()); // Perfectly fine
}
内容总结
以上是互联网集市为您收集整理的java.lang.ArrayStoreException:在为Object [] array 赋值不正确的值时全部内容,希望文章能够帮你解决java.lang.ArrayStoreException:在为Object [] array 赋值不正确的值时所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。