gpt4 book ai didi

scala - 一个 "override"如何在 Scala 中成为内部类?

转载 作者:行者123 更新时间:2023-12-04 03:40:57 24 4
gpt4 key购买 nike

在 Enumeration#Val 类的 Scaladoc 中,我可以读到:“实现 Value 类型的类。可以重写此类以更改枚举的命名和整数标识行为。”我很困惑:我如何覆盖一个类?像 override class Val extends super.Val 这样的事情不允许。

最佳答案

Scala 中还没有虚拟类,所以你不能写 override class Val ... ,然后确保调用 new Val将为新实例动态选择正确的类。取而代之的是,将根据对封闭类实例的引用类型来选择类(在本例中为 Enumeration )。

模拟虚拟类的一般技巧是编写 class Val extends super.Val ,然后覆盖一个 protected 方法,该方法用作类实例的工厂。在这种情况下,您还必须重写该方法:

protected def Value(i: Int, name: String): Value = new Val(i, name)
Enumeration将创建 Val 的实例仅使用此工厂方法。一般来说,这种模式需要程序员方面的纪律,但可以通过将构造函数声明为私有(private)来确保,强制程序员使用工厂方法。

关于scala - 一个 "override"如何在 Scala 中成为内部类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4337601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com