注意:この質問は廃止されました。
interface
宣言構文は Dart から削除されました。
Dart からインターフェイス宣言を削除する提案
「Dart では、すべてのクラスが暗黙のインターフェイスを生成します。この機能が実装されたので、言語からインターフェイス宣言を実際に削除することが可能になります。インターフェイス宣言は、純粋に抽象クラスに置き換えられます。」
私が知る限り、Dartでインターフェースをインスタンス化することは不可能です。コンストラクターが定義されているかどうかに関係なく、単純に を構築しようとするとnew MyInterface()
、実行時エラーが発生します (試してみてください)。
NoSuchMethodException - receiver: '' function name: 'MyInterface$$Factory' arguments: []]
interface MyInterface {}
interface MyInterface {
MyInterface();
}
代わりにファクトリ コンストラクターを使用して実装のインスタンスを返そうとすると、コンパイル時エラーが発生します (試してください)。
SyntaxError: factory members are not allowed in interfaces
class MyImplementation implements MyInterface {
MyImplementation();
}
interface MyInterface {
factory MyInterface() { return new MyImplementation(); }
}
List<E>
ただし、これは、Dart のコア ライブラリの1がインターフェイス2であるにもかかわらず、いくつかのコンストラクタがあり、インスタンス化できるという現実とは相容れないようです。たとえば、これは問題なく動作します (試してください):
main() {
var list = new List();
list.add(5);
print(list.last());
}
List
および他の多くの組み込みインターフェイスをインスタンス化できるのはなぜですか? 私が見逃した方法がありますか、それとも組み込み型として特別な扱いを受けているだけですか?
1 Dart: Libraries: corelib: interface List<E>
2 "Dart Core Library の多くは、インターフェースに関して定義されています。" 3
3 Dart: チュートリアル: インターフェイス