あなたのような場合はお受けできません。
セイロン仕様は、(section 4.5.4 Class Inheritance)言う:
ネストされたクラスのサブクラスでは、ネストされたクラスを宣言またはネストされたクラスを宣言型のサブタイプの種類のメンバーでなければなりません。ネストされたインターフェイスを満たすクラスは、ネストされたインターフェイスを宣言するタイプのメンバー、またはネストされたインターフェイスを宣言するタイプのサブタイプでなければなりません。
したがって、宣言クラスまたはそのサブクラス内でネストされたインターフェイスを満たすことができます。同様の言語は、新しいインターフェイスによってネストされたインターフェイスを拡張するためのものです。
これAnonymous classesに、少し後詳述として、直接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;
}
、これはちょうど、新しく作成された1のために、既存のAOuterClass
オブジェクトでは動作しません。これがオブジェクトのプライベートな値にアクセスすることを可能にすることを見て、これは良いことであるようです。
私はそれが最も簡単な解決策だと思います。 (とはい、それは動作します。) –
アイデアは、外部から指定された 'o'のインタフェースを作成し実装することでした。 (しかしそれはちょうどアイデアであり、重要ではない、私はいくつかの構文トリックがあるかどうか疑問に思った) –