从静态方法访问私有方法

Accessing private method from a static one

我正在尝试从 Dart 中同一个 class 中的静态方法访问私有方法。

class MyClass{

  void _initFunc() {
    /// ...
  }

  static void info(){
    if (condition){
      _initFunc();
    }
  }
}

我遇到了这个错误

Instance members can't be accessed from a static method.

你能解释一下为什么吗,我该怎么做。 info() 必须是静态的,_initFunc() 必须是私有的。

静态方法中没有“this”。所以 MyClass.info() 没有“this”来调用 this._initFunc();

在 Dart 中,class 成员和方法上的 static 修饰符使它们在不创建 class 对象实例的情况下可用。例如特殊的构造函数是 static 因为你想用它们 创建 一个实例。考虑 MyClass foo = MyClass.fromAnotherObject(bar); -> static MyClass fromAnotherObject(){} 是静态的,因为您还没有 MyClass 对象来调用它。

在您的示例代码中,您可以将 _initFunc() 更改为 public 函数(删除“_”)并且:

a) 在静态 info() 方法中实例化一个 MyClass 对象并调用 initFunc()

class MyClass{

  void initFunc() {
    /// ...
  }

  static void info(){
    if (condition){
      MyClass myClass = MyClass();
      myClass.initFunc();
    }
  }
}

b) 声明 initFunc() 也是静态的,并从 info()

中调用它
class MyClass{

  static void initFunc() {
    /// ...
  }

  static void info(){
    if (condition){
      MyClass.initFunc();
    }
  }
}