1
鉴于性状:Scala和使用时菱形继承特质
trait HasSize {
def size() : Int
}
trait StorageTrait extends HasSize {
def something() : Unit
}
trait YetAnotherStorageTrait extends HasSize {
def anotherSomething() : Unit
}
我想创建一流
class InMemoryStorage extends StorageTrait with YetAnotherStorageTrait {
//...
}
现在,方法大小StorageTrait的返回比法YetAnotherStorageTrait不同的东西(它仍然是一个大小,但不同的集合)。
在Scala中设计这种案例的正确方法是什么?
不是真的,我正在寻找一种方法来将方法实现“绑定”到特征。因此,无论何时通过StorageTrait访问类,都会使用一个“大小”,如果通过“YesAnotherStorageTrait”访问,则使用另一个实现。如果InMemoryStorage类型的实例无法调用“size”,我已经准备好支付罚款,因为它没有多大意义。 – jdevelop
这是不可能的,你不能“重载”一个具有相同签名的方法。如果你混合使用,你必须声明哪一个覆盖'size'方法。如果您希望他们独立行事,您需要使用私人大小的方法;这仍然使公开大小的方法模糊不清,所以你应该不这样做。上面的组合有什么问题 - 如果你调用mainStorage,它会正确地使用它的大小,对于'auxStorage'也是正确的。 –
好吧,谢谢,现在很清楚 – jdevelop