(试图通过探测边界来理解自我类型的使用。)
这不能被实例化(D和String是类,但其中一个必须混入。加上String是final。)。但它还有其他用途吗?
class D {
foo: String =>
def f2 = foo.substring(1)
}
更新:抱歉,我似乎不善于提问。 我想知道的是这个奇怪的特殊情况是否有意义。 D类永远无法实例化的情况 我不能混合使用String,因为它不是tarit。 我不能混在D中,因为...... 3.我无法扩展String,因为它是最终的。
答案 0 :(得分:5)
自我类型注释通常有两个目的:
我不确定我理解你的例子或背后的原因。详细点?
答案 1 :(得分:4)
trait Table
trait Desert
trait Meal
class Pancake extends Desert
class Spaghetti extends Meal
class Woodentable extends Table
假设您要确保现有的Class混合使用的依赖项:
trait Restaurant {
self: Table with Desert with Meal =>
def foo():Unit ...
}
现在,在餐厅混合的每个类(或特征)都必须提供以下依赖关系。例如,这用于蛋糕模式。如果不存在任何这些依赖项,编译器将在编译时进行抱怨。