这与这个问题不太一样,它本身没有答案。
我想从实例内部调用 get tableName 当实例是接口时。目前,我将它作为实例方法,确实很好。如果我可以把它作为一个静态方法,我会更高兴,因为它永远不会改变每个实例,并且我拟人化地相信静态方法“成本更低”
问题可能归结为如何在不使用类名的情况下引用静态方法
如果我使用
var foo = anInstance.runtimeType;
,我可以foo.staticMethod()
吗?
干杯
一般来说,“静态”通常意味着某些东西在编译时是已知的。它与“动态”相反。
在 Dart 中,
static
方法always 通过声明它的类的名称来引用。static
方法不能继承,不能被覆盖,也不能通过实例引用。 static method
相当于具有不同作用域的全局函数。
我的拟人化信念是静态方法“成本更低”
是的,
static
方法调用(和全局函数调用)更便宜,因为编译器已经知道要调用哪个函数。相反,调用实例方法需要在运行时查阅vtable以找到适当的覆盖来调用多态行为。
问题可能归结为如何在不使用类名称的情况下引用静态方法
这是不可能的。目前尚不清楚您希望通过省略类名称来实现什么目的。如果您想节省一些输入,可以使用全局函数而不是
static
方法。
如果我使用
,我可以var foo = anInstance.runtimeType;
吗?foo.staticMethod()
不,这是不可能的。
runtimeType
返回一个 Type
对象,除了比较它们是否与其他 Type
对象相同之外,您几乎无能为力。 static
方法必须在静态已知(编译时已知)类型上调用。 Dart 不提供任何自动方式来动态调用 static
方法。