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 内嵌类访问外部类引用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统