Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Scala中扩展匿名类型的目的是什么?_Scala_Anonymous Types_Extending - Fatal编程技术网

在Scala中扩展匿名类型的目的是什么?

在Scala中扩展匿名类型的目的是什么?,scala,anonymous-types,extending,Scala,Anonymous Types,Extending,我试图更好地理解Scala,但似乎找不到以下代码的有效用例: class C extends { def m() { /* ... */ } } 允许这种构造的理由是什么 谢谢 我想这里唯一的理由是“尽可能避免特殊情况”。您可以扩展任何类,匿名类是一个类,因此您可以扩展匿名类。事实上,这不是匿名类!它是一个早期的初始值设定项,它作为构造函数的一部分在其超类之前运行。 引用以下优秀答案: 如果代码改为 class Z extends X { val name = "class Z" }

我试图更好地理解Scala,但似乎找不到以下代码的有效用例:

class C extends { def m() { /* ... */ } }
允许这种构造的理由是什么


谢谢

我想这里唯一的理由是“尽可能避免特殊情况”。您可以扩展任何类,匿名类是一个类,因此您可以扩展匿名类。

事实上,这不是匿名类!它是一个早期的初始值设定项,它作为构造函数的一部分在其超类之前运行。 引用以下优秀答案:

如果代码改为

class Z extends X {
    val name = "class Z"
}

然后,在初始化Z时会发生空指针异常,因为在正常的初始化顺序(类之前的超类)中,大小在名称之前初始化。

调用它,它们处理超类初始化顺序问题。

您给出的示例不是结构类型,而是匿名类。这并不能解释为什么你可以扩展它…没错,我更新了标题你可能是对的(+1)。但是,如果确实存在一个用例,我会喜欢它:)我同意Kim的观点,继承允许共享行为或表示给定的层次结构。但是如果父类是匿名的,则不能有两个子类扩展同一父类。不能扩展
final
类。我想匿名类可以被设置为final,但如果没有任何理由扩展匿名类,那么它们是否为final可能没有任何区别。我想提醒用户,这个答案是错误的。几年来,这一直是人们接受的答案,而且它具有误导性,因为它与避免特殊情况无关。见下面我的答案。
class Z extends X {
    val name = "class Z"
}