为什么scala clone在IntelliJ中显示AnyRef错误?

为什么scala clone在IntelliJ中显示AnyRef错误?,scala,Scala,我想在scala中克隆一个对象,我不明白为什么会看到AnyRef错误 IntelliJ说: Type mismatch. Required: Foo Found: AnyRef 我做错了什么?您很可能想使用: 这正如预期的那样有效。但是您使用的是Java方法。您很可能希望使用: 这正如预期的那样有效。但是您使用的是Java方法。有几点我不想指出 没有Scala克隆方法。这是一种Java克隆方法,它具有复杂的契约,有一种最佳实践可以避免它 Scala案例类用于创建不可变的值对象。编译器还生成代码

我想在scala中克隆一个对象,我不明白为什么会看到AnyRef错误

IntelliJ说:

Type mismatch.
Required: Foo
Found: AnyRef

我做错了什么?

您很可能想使用:


这正如预期的那样有效。但是您使用的是Java方法。

您很可能希望使用:


这正如预期的那样有效。但是您使用的是Java方法。

有几点我不想指出

没有Scala克隆方法。这是一种Java克隆方法,它具有复杂的契约,有一种最佳实践可以避免它

Scala案例类用于创建不可变的值对象。编译器还生成代码,例如复制方法,以使使用此类对象的工作更加方便,但不变性在这里是关键。克隆不可变对象的整个想法毫无意义

您应该使用单例对象,而不是没有参数的case类

案例类用于建模代数数据类型,这是FP的核心概念。例如,您可以查看选项和


有几件事我不想指出

没有Scala克隆方法。这是一种Java克隆方法,它具有复杂的契约,有一种最佳实践可以避免它

Scala案例类用于创建不可变的值对象。编译器还生成代码,例如复制方法,以使使用此类对象的工作更加方便,但不变性在这里是关键。克隆不可变对象的整个想法毫无意义

您应该使用单例对象,而不是没有参数的case类

案例类用于建模代数数据类型,这是FP的核心概念。例如,您可以查看选项和


我使用copy来更改特定用例的测试装置,所以我不必多次重复它的定义,只需更改特定属性。你会为该用例推荐其他东西吗?只要你不想得到一个具有修改属性的新对象,复制就完全可以了。我正在使用复制来更改特定用例的测试装置,这样我就不必多次重复它的定义,只需更改特定属性。你会为这个用例推荐其他的东西吗?只要你不想得到一个具有修改过的属性的新对象,复制就可以了。
Type mismatch.
Required: Foo
Found: AnyRef
case class Foo()
case class Bar(foo: Foo)

val foo = Foo()
val bar = Bar(foo.copy())