gpt4 book ai didi

interface - 为什么 Dart 内置的 List 接口(interface)可以实例化?

转载 作者:行者123 更新时间:2023-12-04 01:02:57 25 4
gpt4 key购买 nike

Notice: This question is obsolete; the interface declaration syntax has been removed from Dart:



据我所知,在 Dart 中实例化接口(interface)是不可能的。 .如果我只是尝试构建一个 new MyInterface() ,无论是否定义了构造函数,都会出现运行时错误( try it ):

NoSuchMethodException - receiver: '' function name: 'MyInterface$$Factory' arguments: []]
interface MyInterface {}      
interface MyInterface {
MyInterface();
}

如果我尝试使用工厂构造函数,返回一个实现的实例,我会得到一个编译时错误( try it):

SyntaxError: factory members are not allowed in interfaces
class MyImplementation implements MyInterface {
MyImplementation();
}

interface MyInterface {
factory MyInterface() { return new MyImplementation(); }
}

然而,这似乎与 List<E> 的现实不符。 Dart 核心库中的 1 是一个接口(interface) 2,但它有多个构造函数并且可以实例化。例如,这很好用( try it ):
main() {
var list = new List();
list.add(5);
print(list.last());
}

为什么可以 List和许多其他内置接口(interface)被实例化?是否有一些我错过的方法,或者他们只是作为内置类型接受特殊处理?

1 Dart: Libraries: corelib: interface List<E>
2 “Dart 核心库的大部分内容是根据接口(interface)定义的。”3
3 Dart: Tutorial: Interfaces

最佳答案

定义接口(interface)的语法是:

interfaceDefinition:
interface identifier typeParameters? superinterfaces? factorySpecification? `{' (interfaceMemberDefinition)* `}'

请注意 factorySpecification必须在接口(interface)主体之前而不是在它内部。

所以这就是你写它的方式:
interface MyInterface default MyImplementation {

}

class MyImplementation implements MyInterface {
MyImplementation();
}

或者,如果您想获得完整的通用定义:
interface MyInterface<E> default MyImplementation<E> {
MyInterface(x);
}

class MyImplementation<E> implements MyInterface<E> {
MyImplementation(this.x);
E x;
}

编辑 : 如需更完整的示例,您可以阅读 interface List<E> 的源代码在 https://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/corelib/src/list.dart和相关的 class ListFactory<T>来源是 https://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/runtime/lib/array.dart

关于interface - 为什么 Dart 内置的 List 接口(interface)可以实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7722867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com