我有C背景。不能将对象
添加到foo()
中的对象[]
中,这对我来说是没有意义的。
我希望函数foo
中的代码在运行时工作,但在main()
中当我尝试执行Strings[0].ToLowerCase()时失败,因为
Strings[0]
中的对象不是String
而是一个没有ToLowerCase()
的StringBuilder
。最终,我将一个指针存储到指针数组中,而行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协方差数组”,发现了这篇讨论这种行为的文章。诀窍在于编译器和运行库对代码的处理非常不同。编译器可以处理代码,而运行时不行。
从ArrayStoreException
的文档中可以看到:
引发以指示已尝试将错误类型的对象存储到对象数组中。例如,以下代码生成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
}
我是angular的新手,我在学习这个hero教程时,偶然发现了这个错误: 我在这里复制了错误。
我想把列表中的对象分配给类变量。 感恩节:)
这个要怎么改 const callRowCol = (type: string, data: object) => { mapType.value = type; isVisible.value = true; console.log(type); console.log(data); };
在我新创建的Angular应用程序中,我尝试使用mattlewis92的Angular日历来创建他的日历。我已经复制了他的github:https://mattlewis92.github.io/Angulat-calendar/#/kitchenter-sink上列出的所有步骤和代码,但我在第一行总是发现一个错误,即指出“{static:boolean;}类型的参数不能分配给{read?:any
我和dplyr一起工作,我有一个类似的小消息: 所以我可以对每个列使用ifelse函数和mutate: 但是在我真正的df中,我有很多列,那么这个wat是非常低效的。我需要一些更优雅的东西,使用mutate_at和列名,但这似乎很难。我试着用很多方法做到这一点,但每次我都会出错。有什么建议吗?
我是打字新手。我正在使用Express、Node和Typescript进行备份。我有一个具有类型的对象: 我正在创建一个新的水果实例,从JSON文件中重新创建水果类型并填充它 这会产生一个错误。我知道我得到这个错误是因为我分配了一个未知字符串而不是Enum值。我假设解决方案是在将水果类型指定给FruitType对象之前,以某种方式检查水果类型是否为其中一个值。如何修复此错误?