This is not quite the same as this question, which itself is unanswered.
I want to call get the tableName from inside an instance when the instance is an interface. Currently, I have it as an instance method and it's fine, really. If I could put it as a static method, I would be happier because it never changes per instance and my anthropomorphic belief that static methods "cost less"
The issue might come down to how to reference a static method without using the name of the class
If I use var foo = anInstance.runtimeType;
, should I be able to foo.staticMethod()
?
Cheers
In general, "static" typically means that something is known at compile-time. It is the opposite of "dynamic".
In Dart, a static
method is always referenced via the name of the class that it's declared in. static
methods are not inherited, cannot be overridden, and cannot be referenced via instances. A static
method is equivalent to a global function with a different scope.
my anthropomorphic belief that static methods "cost less"
Yes, static
method calls (and global function calls) are cheaper because the compiler already knows which function to call. In contrast, invoking an instance method requires consulting a vtable at runtime to find the appropriate override to invoke for polymorphic behavior.
The issue might come down to how to reference a static method without using the name of the class
This is not possible. It's not clear what you hope to achieve by omitting the class name. If you want to save some typing, you could use a global function instead of a static
method.
If I use
var foo = anInstance.runtimeType;
, should I be able tofoo.staticMethod()
?
No, that is not possible. runtimeType
returns a Type
object, and there's almost nothing you can do with those except to compare whether they are identical to other Type
objects. static
methods must be invoked on a statically-known (known at compile-time) type. Dart does not provide any automatic way to invoke static
methods dynamically.
Also see: https://stackoverflow.com/a/70468829/