我正在阅读(好的,略读)Dubochet和Odersky 在JVM上编译结构类型,并对以下声明感到困惑:
生成技术创建Java接口以代表JVM上的结构类型.这种技术的复杂性在于,在程序中任何地方用作结构类型的所有类都必须实现正确的接口.在编译时完成此操作时,它会阻止单独编译.
(重点补充)
考虑论文中的autoclose示例:
type Closeable = Any { def close(): Unit }
def autoclose(t: Closeable)(run: Closeable => Unit): Unit = {
try { run(t) }
finally { t.close }
}
Run Code Online (Sandbox Code Playgroud)
我们无法为该Closeable类型生成如下接口:
public interface AnonymousInterface1 {
public void close();
}
Run Code Online (Sandbox Code Playgroud)
并将我们的定义转换autoclose为
// UPDATE: using a view bound here, so implicit conversion is applied on-demand
def autoclose[T <% AnonymousInterface1](t: T)(run: T => Unit): Unit = {
try { run(t) }
finally { t.close } …Run Code Online (Sandbox Code Playgroud)