假设我有一个抽象类型AA和具体类型XXX:
trait AA { type A = XXX final type B = XXX }
在这种情况下,在AA的任何子类中,类型A和B都不能被覆盖,因此看起来关键字final是完全冗余的.这个陈述是否正确?
解决方法
很难证明它们完全相同,但我会争辩说它们是,减去一些无用的怪癖.
无用的怪癖
首先,最明显的是,他们给出了不同的错误信息.但这不是全部:技术上可以覆盖A,你只是不能将它覆盖到XXX以外的任何东西:
trait A1 extends AA { override type A = XXX // Compiles,but doesn't really do anything. }
另一方面,你不能覆盖B:
trait A2 extends AA { override type B = XXX // Does not compile. }
有什么有用的差异吗?
再说一遍,我会争辩说没有.在非常详细的answer到问题Is it possible to override a type field中,StackOverflow用户0__注意到了这一点
type T = C
inevitably fixesT
,which would kind of correspond to making a methodfinal
.
和
You can Now easily see that it must be forbidden to further ‘override’
T
如果你可以将T覆盖到不同的类型,接着解释一下类型系统如何不一致.有关详细信息,请参阅该答案.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。