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