sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-12-02 22:19:18 28 4
mua khóa gpt4 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 个子类)!

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

1 Câu trả lời

如果不需要原始类,可以使用 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/

28 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com