gpt4 book ai didi

generics - 在 Haxe 中,您可以编写一个泛型接口(interface),其中方法类型参数受类的类型参数约束吗?

转载 作者:行者123 更新时间:2023-12-04 10:00:35 24 4
gpt4 key购买 nike

我在编写下面的通用接口(interface)时遇到了麻烦。

在我的类中,我有一个函数,它接受一个 <任何扩展父类的类型> 的数组并跟踪它的第一个元素。因为我只是从数组中读取元素,所以我使用它就好像它是 covariant compound type ,因此我保证让 cast 语句永远不会失败。

现在我想进一步抽象它,并编写一个使用另一个泛型类型 T 定义 fn 的接口(interface)。我希望 fn 能够接受任何 Array < type that extends T >。当我让我的测试类实现这个接口(interface)时,我得到编译器错误:“Field fn has different type than in ConstraintInter”。如何更正此界面?或者是否有其他方法/解决方法来实现这一点?

class TestParent { public function new() {} }
class TestChild extends TestParent { public function new() { super(); } }

@:generic
interface ConstraintInter<T>
{
// this causes a compiler error
public function fn<V:T>(arg:Array<V>):Void;
}

@:generic
class ConstraintTest<T> implements ConstraintInter<T>
{
public function new () {}

public function fn<V:T>(arg:Array<V>):Void
{
var first:T = cast arg[0];
trace(first);
}

public function caller()
{
var test = new ConstraintTest<TestParent>();
// var test = new ConstraintTest();
// Base case that always works
test.fn([new TestParent()]);

// I want this to work.
var childArray:Array<TestChild> = [new TestChild()];
test.fn(childArray);

// This should throw a compile error.
// test.fn([3]);
}
}

最佳答案

您可以为此使用通用接口(interface):

class TestParent { public function new() {} }
class TestChild extends TestParent { public function new() { super(); } }

@:generic
interface ConstraintInter<T>
{
// this causes a compiler error when implemented in class below
public function fn<V:T>(arg:Array<V>):Void;
}


class ConstraintTest implements ConstraintInter<TestParent>
{
public function new () {}

public function fn<V:TestParent>(arg:Array<V>):Void
{
var first:TestParent = cast arg[0];
trace(first);
}

public function caller()
{
// Base case that always works
fn([new TestParent()]);

// I want this to work.
var childArray:Array<TestChild> = [new TestChild()];
fn(childArray);

// This should throw a compile error.
// fn([3]);
}
}

Haxe 4.1.0

关于generics - 在 Haxe 中,您可以编写一个泛型接口(interface),其中方法类型参数受类的类型参数约束吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61841914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com