gpt4 book ai didi

Scala、类层次结构和构造函数复制/粘贴

转载 作者:行者123 更新时间:2023-12-02 05:20:14 29 4
gpt4 key购买 nike

我已经为这个烦人的问题苦苦挣扎了一段时间,但没有找到一个优雅的解决方案。

假设我有这样一个类层次结构:

class StatWithBounds[A](val min: A, val max: A, val currentValue: A)
class StatBetween0And20(initialValue: Int) extends StatWithBounds[Int](0, 20, initialValue)
class PositiveStatOnly(initialValue: Int) extends StatWithBounds[Int](0, Integer.MAX_VALUE, initialValue)
class UncappedPercentage(initialValue: Int) extends StatWithBounds[Int](0, Integer.MAX_VALUE, initialValue)

initialValue 的复制/粘贴过于冗长。此外,如果我想做这样的事情:

class Strength(initialValue: Int) extends StatBetween0And20(initialValue)
class Intelligence(initialValue: Int) extends StatBetween0And20(initialValue)
class Piety(initialValue: Int) extends StatBetween0And20(initialValue)

多么糟糕的复制/粘贴(想象一下我还有 10 个子类)!

有没有一种优雅的方法来解决这个困惑的问题?

最佳答案

如果不需要原始类,可以使用 traits 代替:

trait StatWithBounds[A] {
def min: A
def max: A
def currentValue: A
}

trait StatBetween0And20 extends StatWithBounds[Int] {
def min = 0
def max = 20
}

class Strength(val currentValue: Int) extends StatBetween0And20
class Intelligence(val currentValue: Int) extends StatBetween0And20
...

或者,您也可以不使用这么长的变量名!

class Stat[A](val min: A, val max: A, val current: A)
class Stat20(i: Int) extends Stat[Int](0, 20, i)
class Strength(i: Int) extends Stat20(i)
class Intelligence(i: Int) extends Stat20(i)
...

看看噪音降低了多少?长变量名是样板的一种形式。有时为了清楚起见,您需要它,但通常不是为了将参数传递给构造函数。

关于Scala、类层次结构和构造函数复制/粘贴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13988536/

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