我来自C背景。我不能将 an 添加Object到Object[]in对我来说没有意义foo()。
我希望函数中的代码foo可以在运行时工作,但是main()当我尝试这样做时会失败,strings[0].toLowerCase();因为 in 中的对象strings[0]不是 aString但实际上是 aStringBuilder没有toLowerCase(). 在一天结束时,我将一个指针存储到一个指针数组中,并且该行objects[0] = other不应该是无效的。很明显,我对 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协方差”,并遇到了讨论这种行为的问题。诀窍是编译器和运行时处理代码的方式非常不同。编译器对代码很好,运行时不是。