【问题标题】:How to override abstract's method with it's body template in dart?如何在飞镖中用其主体模板覆盖抽象方法?
【发布时间】:2020-09-27 03:19:00
【问题描述】:

我想要这样的东西:

abstract class A {

  void someMethod(dataStates) {
    switch (dataStates) {
      case DataStates.loading:
        stackIndex = 0;
        break;
      case DataStates.failed:
        stackIndex = 1;
        break;
      case DataStates.completed:
        stackIndex = 2;
        break;
    } // switch
  } // someMethod

} // class A


class B implements A {

  @override
  void someMethod(dataStates) {
    switch (dataStates) {
      case DataStates.loading:
        stackIndex = 0;
        break;
      case DataStates.failed:
        stackIndex = 1;
        break;
      case DataStates.completed:
        stackIndex = 2;
        break;
    } // switch
  } // someMethod

} // class B

但是当我在 B 类中重写 someMethod() 时,我得到一个空主体的方法,如下所示:

  @override
  void someMethod(dataStates) {
    // TODO: implement someMethod
  }

重写时如何拥有默认(模板)方法体?

【问题讨论】:

  • 你的问题有点不清楚。我明白了,您只想要一个预先编写的覆盖模板?对吗?
  • @ShahzadAkram 完全正确!
  • 如果您只想再次执行相同的代码,这是不可能的,您可以使用super.someMethod(dataStates);,如下面的答案中所述。但是您期望任何第三方插件都可以实现,但默认情况下似乎不可能成为 dart SDK 的一部分。
  • 听起来您正在寻找代码生成器。我可以建议 Freezed,它具有 when 功能吗?

标签: oop flutter dart overriding abstract-class


【解决方案1】:

使用这个

@override
  void someMethod(dataStates) {
    super.someMethod(dataSates);
  }

【讨论】:

    【解决方案2】:
    class B extends A { // extends not implements
      @override
      void someMethod(dataStates) {
        super.someMethod(dataStates);
    
        // Do what you want to do 
      }
    }
    

    【讨论】:

    • 我不想调用方法,我只想覆盖那个模板!
    • 我希望我的方法有一个模板代码,当我覆盖它时
    • 您希望在覆盖时自动复制那些 switch 语句,抱歉,这是不可能的,您需要手动执行此操作。
    猜你喜欢
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    相关资源
    最近更新 更多