1.30

new内嵌类实例语法形式为new <外部类实例>.<内嵌类名>,而java中为<外部类实例>.new <内嵌类名>。

class P{
    class PNested
}
object P {
    class PInner
}

object app extends App {
    val p=new P
    val p2=new P
    val list1:ListBuffer[p.PNested] = ListBuffer()
    list1 += new p.PNested  // OK
    // list1 += new p2.PNested // compilation ERROR
    
    val list2:ListBuffer[P#PNested] = ListBuffer()
    list2 += new p.PNested  // OK
    list2 += new p2.PNested  // OK
    
    println(new p.PNested().getClass eq new p2.PNested().getClass)  // but this gets true
    
    val z = new P.PInner
}

class Outer{
    class Inner{
        def conn(n:Inner){}
    }
    def newInn:Inner=new Inner
    
}
val outer1=new Outer; val o1n1=new outer1.Inner;val o1n2=outer1.newInn;
val outer2=new Outer; val o2n1=outer2.newInn
o1n1.conn(o1n2); // OK,o1n1, o1n2类型均为o1.Inner
//! o1n2.conn(o2n1); // ERROR o1n1类型为o1.Inner,其conn方法期待的类型是o1.Inner,而o2n1类型为o2.Inner

class ... {
    class Inner {
        def conn(n: Outer#Inner){}
    }
}

class中可定义内嵌class或object,object的归属性质同class。

TODO 内嵌类访问外部类引用

posted @   秋渡晚枫  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示