In einem Fall wie Ihrem ist es nicht möglich.
Der Ceylon-Spezifikation sagt (section 4.5.4 Class Inheritance):
Eine Unterklasse von einer verschachtelten Klasse ein Mitglied der Typ sein, der die verschachtelte Klasse oder eines Subtyps des Typs erklärt, die die verschachtelte Klasse deklariert. Eine Klasse, die eine verschachtelte Schnittstelle erfüllt, muss Mitglied des Typs sein, der die verschachtelte Schnittstelle deklariert, oder eines Subtyps des Typs, der die verschachtelte Schnittstelle deklariert.
So können Sie nur eine verschachtelte Schnittstelle innerhalb der deklarierenden Klasse oder in einer Unterklasse davon erfüllen. Eine ähnliche Sprache gibt es, um eine verschachtelte Schnittstelle durch eine neue Schnittstelle zu erweitern.
Dies erwähnt nicht direkt object
Erklärungen, aber das ist nur eine Abkürzung für Klassendefinitionen, wie etwas später, in Anonymous classes erarbeitet:
Die folgende Erklärung:
shared my object red extends Color('FF0000') {
string => "Red";
}
ist genau entspricht:
shared final class \Ired of red extends Color {
shared new red extends Color('FF0000') {}
string => "Red";
}
shared my \Ired red => \Ired.red;
Wo \Ired
ist der vom Compiler zugewiesene Typname.
So deckt dies auch object
Deklarationen als Ihr ein.
Was Sie könnten in der Lage sein zu tun (ich habe das nicht getestet):
AOuterClass.AInterface test(){
object o extends AOuterClass() {
shared object impl satisfies AInterface{}
}
return o.impl;
}
Natürlich funktioniert das nicht für ein bestehendes AOuterClass
Objekt, nur für einen neu erstellen. Da dies den Zugriff auf einen privaten Wert eines Objekts ermöglicht, scheint dies eine gute Sache zu sein.
Ich stimme zu, das ist die einfachste Lösung. (Und ja, es funktioniert.) –
Die Idee war, die Schnittstelle von außen für ein bestimmtes 'o' zu erstellen und zu implementieren. (Aber es war auch nur eine Idee und es ist nicht wichtig, ich habe mich nur gefragt, ob ich einen Syntax-Trick habe) –