【问题标题】:Dart. No warnings and errors when class doesn't implement an interface镖。当类没有实现接口时没有警告和错误
【发布时间】:2015-03-25 19:39:44
【问题描述】:

我无法理解飞镖这种“奇怪”的行为。看上面的示例:

abstract class Swimmer {
  int numOfSwim;
  Swim();
}

class Human implements Swimmer {

}

当我运行此代码时,没有警告和错误。我从 DART_FLAGS='--enable_type_checks --enable_asserts' 开始 dartium。我勒个去?如果该类实际上没有实现接口,该类如何实现接口.. 看起来 Dart 有点松散。

可能 Dart 有一些模式要更严格。

【问题讨论】:

  • 如果你在 DartEditor 中运行它,你会看到以下警告:Missing concrete implementation of setter 'Swimmer.numOfSwim', 'Swimmer.Swim' and getter 'Swimmer.numOfSwim'
  • 我使用 Intellij。它关于语言而不是 IDE。如果 DartEditor 能识别这个傻瓜就好了,但我不使用它)
  • 嗯,DartEditor 只是挂钩到 Dart Analyzer。 IntelliJ 做同样的事情,并给我同样的警告。
  • dartanalyzer - 好多了!可能是 Dartium 有额外的标志来在控制台中显示这样的警告吗?如果没有,请添加有关使用dartanalyzer 的建议 - 我接受。
  • 我添加了一个更完整的解释来区分警告和错误。

标签: dart


【解决方案1】:

Dart spec 状态 (p38):

如果具体类没有 在其任何超接口中实现方法,除非它 声明自己的 noSuchMethod 方法 (10.10)。

静态警告有助于开发人员发现错误,但不会干扰 Dart 程序的执行。另一方面,错误确实会对程序执行产生影响。您可以在 Dart 规范的第 10 页阅读有关警告和错误之间区别的更多信息。

既然是这种情况,在 Dartium 中运行代码就可以正常工作,因为缺少方法实现只是一个警告,而不是错误。如果你想捕捉这些警告,你可以使用Dart Analyzer 来检查警告和错误。 Dart Editor 和 IntelliJ 等 IDE 集成了分析器,因此您不必手动运行它。

例如,在 Dart 编辑器中,您的代码将显示以下警告:

缺少 setter 'Swimmer.numOfSwim' 的具体实现, 'Swimmer.Swim' 和吸气剂 'Swimmer.numOfSwim'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多