【发布时间】:2015-06-21 23:40:36
【问题描述】:
假设我有:
trait A[AA <: A[AA]]
//or even just `
trait A[AA]
这不起作用:
scala> object AAA extends A[AAA.type]
<console>:8: error: illegal cyclic reference involving object AAA
object AAA extends A[AAA.type]
^
但这有效:
scala> class AAA extends A[AAA]; object AAA extends AAA
defined class AAA
defined module AAA
做几乎(不完全)相同的工作。有什么原因吗?
附:而且,在这样的对象中究竟是什么can I do 来强制编译器本身内部的无限循环?
【问题讨论】:
-
blog.originate.com/blog/2014/02/27/types-inside-types-in-scala,我认为这会有所帮助。但是你想解决什么问题呢?
-
同样的问题:stackoverflow.com/questions/17915353/…,但没有好的答案
-
@Governa 没问题 - 我的子类型只是单例,所以对我来说只是一点点开销。第一个链接只是介绍 F-bounded polymorphizm,所以没有太大帮助。其次帮助我发现这不仅仅是 F-Bounded 类型的问题,谢谢
-
解决方法可能是
trait AAA extends A[AAA]; object AAA extends AAA
标签: scala generics types polymorphism