gd1*_*gd1 9 java scala inner-classes
Java中的这段代码编译时没有错误:
interface T {
interface Q {
}
}
class C implements T.Q {
}
Run Code Online (Sandbox Code Playgroud)
而Scala中的此代码不会:
trait T {
trait Q {
}
}
class C extends T.Q {
}
Run Code Online (Sandbox Code Playgroud)
Scala中Java代码列表的正确翻译(如果存在)是什么?
关于语言设计的理论解释是受欢迎的.
pag*_*_5b 10
内部类型Q仅为特征的特定实例实现定义T.由于scala具有路径依赖类型,因此每个实例T将具有自己的子特征Q.
scala> trait T {
| trait Q
| }
defined trait T
scala> class C extends T {
| def getQ: this.Q = new this.Q {}
| }
defined class C
scala> val inC = (new C).getQ
inC: C#Q = C$$anon$1@3f53073a
scala> val c = new C
c: C = C@1a7e4ff0
scala> new c.Q {}
res4: c.Q = $anon$1@36bbb2f5
Run Code Online (Sandbox Code Playgroud)
如果您需要为客户端实现通用行为的接口,而不依赖于特定C实例,则应在其中定义Object
scala> object T {
| trait Q {
| def implementMe: Unit
| }
| }
defined module T
scala> val inT = new T.Q {
| def implementMe = println("implemented!")
| }
inT: T.Q = $anon$1@20f2a08b
scala> inT.implementMe
implemented!
Run Code Online (Sandbox Code Playgroud)
为什么路径依赖类型?
至于设计原因,请看这里
| 归档时间: |
|
| 查看次数: |
2609 次 |
| 最近记录: |