我在去的时候重新学习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支持中的错误?
答案 0 :(得分:3)
你的代码很好。它是IntelliJ插件中的一个错误。
恕我直言,您可以尝试使用另一个IDE,它现在不是最好的(对于Haxe),如果您检查存储库,它就不再维护了。 您可以尝试HaxeDevelop(Windows)或VSCode(Windows / Linux / Mac)。