在扩展抽象的 Dart (Flutter) 类中,实例如何引用静态方法(例如 tableName)?

问题描述 投票:0回答:1

这与这个问题不太一样,它本身没有答案。

我想从实例内部调用 get tableName 当实例是接口时。目前,我将它作为实例方法,确实很好。如果我可以把它作为一个静态方法,我会更高兴,因为它永远不会改变每个实例,并且我拟人化地相信静态方法“成本更低”

问题可能归结为如何在不使用类名的情况下引用静态方法

如果我使用

var foo = anInstance.runtimeType;
,我可以
foo.staticMethod()
吗?

干杯

flutter dart instance static-methods runtime-type
1个回答
0
投票

一般来说,“静态”通常意味着某些东西在编译时是已知的。它与“动态”相反。

在 Dart 中,

static
方法always 通过声明它的类的名称来引用。
static
方法不能继承,不能被覆盖,也不能通过实例引用。
static method
相当于具有不同作用域的全局函数。

我的拟人化信念是静态方法“成本更低”

是的,

static
方法调用(和全局函数调用)更便宜,因为编译器已经知道要调用哪个函数。相反,调用实例方法需要在运行时查阅vtable以找到适当的覆盖来调用多态行为。

问题可能归结为如何在不使用类名称的情况下引用静态方法

这是不可能的。目前尚不清楚您希望通过省略类名称来实现什么目的。如果您想节省一些输入,可以使用全局函数而不是

static
方法。

如果我使用

var foo = anInstance.runtimeType;
,我可以
foo.staticMethod()
吗?

不,这是不可能的。

runtimeType
返回一个
Type
对象,除了比较它们是否与其他
Type
对象相同之外,您几乎无能为力。
static
方法必须在静态已知(编译时已知)类型上调用。 Dart 不提供任何自动方式来动态调用
static
方法。

另请参阅:https://stackoverflow.com/a/70468829/

© www.soinside.com 2019 - 2024. All rights reserved.