【问题标题】:Extending a Generic Class and Overriding a Method in Haxe in IntelliJ在 IntelliJ 的 Haxe 中扩展泛型类并覆盖方法
【发布时间】:2016-07-17 03:41:09
【问题描述】:

我正在重新学习 Haxe 和 HaxeFlixel,但在泛型方面我遇到了一个绊脚石。

我有一个通用超类(除其他外),它接受并返回一个通用参数T。在该超类的特定子类中,我想重写该方法以稍微增强它的行为。在 Java 中这没问题,如下所示:

public class A<T> {
  public T doStuff(T t) {
    return t;
  }
}

public class B extends A<String> {
  public String doStuff(String s) {
    System.out.println(s)
      return s;
   }
}

这可以正确编译和运行。然而,当我尝试在 Haxe 中做同样的事情时:

class A<T> {
  public function doStuff(t : T) : T {
    return t;
  }
}

class B extends A<String> {
  public override function doStuff(s : String) : String { //Compilation error
    trace(s);
    return s;
  }
}

IntelliJ 在 arg 类型和返回类型的标记行上显示错误,并显示消息

Type String 与 T 不兼容

与返回类型不兼容 String != T

但是,它无论如何都会编译。我在 IntelliJ 中的 Haxe 设置是否不正确,或者这是 Haxe 支持中的错误?

【问题讨论】:

  • 不知道 Haxe,但 doc“基本类型是 BoolFloatInt。[...] 基本类型不是类 在 Haxe 中。” 看起来 T 不能是 基本类型,类似于 T 不能是 Java 原语(例如int)。
  • 这只是一个 MVC,我的真实示例是使用不同的(非简单)类;同样的问题。我将对其进行编辑,以便简单/非简单类型无关紧要
  • 您的示例在动态目标上编译得很好,您是在静态 (cpp) 上编译吗?您使用的是哪个版本的 haxe? try.haxe.org/#6E8c9
  • 静态编译也很好,我猜还有另一行会导致错误。
  • @MihailIgnatiev 感谢您的仔细检查,因为您是对的,它确实可以编译。我现在的问题(请参阅更新)是为什么 intelliJ 在编译时仍将其标记为错误

标签: generics intellij-idea haxe


【解决方案1】:

您的代码很好。这是 IntelliJ 插件中的一个错误。

恕我直言,您可以尝试使用另一个 IDE,这不是目前最好的(对于 Haxe),如果您检查存储库,它不再维护。 你可以试试HaxeDevelop (Windows) 或VSCode (Windows/Linux/Mac)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 2013-08-20
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    相关资源
    最近更新 更多