在像你这样的情况下是不可能的。
Ceylon 规范说(第 4.5.4 节类继承):
嵌套类的子类必须是声明嵌套类的类型或声明嵌套类的类型的子类型的成员。满足嵌套接口的类必须是声明嵌套接口的类型或声明嵌套接口的类型的子类型的成员。
因此,您只能在声明类或其子类中满足嵌套接口。类似的语言用于通过新接口扩展嵌套接口。
这并没有直接提到object
声明,但它们只是类定义的一种快捷方式,稍后会在匿名类中详细说明:
以下声明:
shared my object red extends Color('FF0000') {
string => "Red";
}
完全等同于:
shared final class \Ired of red extends Color {
shared new red extends Color('FF0000') {}
string => "Red";
}
shared my \Ired red => \Ired.red;
\Ired
编译器分配的类型名称在哪里。
因此,这也涵盖object
了您的声明。
你可以做什么(我没有测试这个):
AOuterClass.AInterface test(){
object o extends AOuterClass() {
shared object impl satisfies AInterface{}
}
return o.impl;
}
当然,这不适用于现有AOuterClass
对象,仅适用于新创建的对象。看到这允许访问对象的私有值,这似乎是一件好事。