在 Dart 中,从变量调用静态方法的问题

cc *_*ung 7 static class dart dart-mirrors

Klass静态方法的类fn1

class Klass {
  static String fn1() => 'hello';
}

> Klass.fn1(); //  hello
Run Code Online (Sandbox Code Playgroud)

但是当Klass分配给一个变量时,调用该方法fn1失败

var k = Klass;

> k.fn1() // "Unhandled exception: Class '_Type' has no instance method 'fn1'.
Run Code Online (Sandbox Code Playgroud)

不太清楚这里发生了什么

Sha*_*uli 5

我不确定这里代码的意图是什么,但您可能想使用dart:mirrors反射式调用fn1(). 我不相信您可以通过分配Klass给变量来调用它。您可以这样做:

import 'dart:mirrors';

class Klass {
  static String fn1() => 'hello';
}

main() {
  final mirror = reflectClass(Klass);
  print(mirror.invoke(#fn1, []).reflectee); // Prints 'hello'.

}
Run Code Online (Sandbox Code Playgroud)


ITW*_*ITW 5

一个简单的解决方法

class Klass {
  static fn1(String name) {
    return name;
  }
  
  fn1NonStatic(String name) {
    return fn1(name);
  }
}

Klass().fn1NonStatic("test");
Run Code Online (Sandbox Code Playgroud)