【发布时间】:2022-01-21 09:07:36
【问题描述】:
我正在尝试创建一个包含 2 个属性的类 "CombinedResource",每个属性的类型都是 "Resource"。
现在Resource类如下:
class Resource<T>{
final T? data;
Resource({this.data});
}
而CombinedResource类如下:
class CombinedResource<T1 extends Resource<Ta>, T2 extends Resource<Tb>, Ta, Tb>
{
final T1? resourceA;
final T2? resourceB;
const CombinedResource._({
this.resourceA,
this.resourceB,
});
factory CombinedResource.create(
Resource<Ta> rA,
Resource<Tb> rB,
) =>
CombinedResource._(
resourceA: rA,
resourceB: rB,
);
}
现在,问题是编译器在工厂方法上给我一个错误:
The argument type 'Resource<Ta>' can't be assigned to the parameter type 'T1?'.
我尝试将 CombinedResource 类更改为如下:
class CombinedResource<Ta,Tb>
{
final Resource<Ta>? resourceA;
final Resource<Tb>? resourceB;
const CombinedResource._({
this.resourceA,
this.resourceB,
});
factory CombinedResource.create(
Resource<Ta> rA,
Resource<Tb> rB,
) =>
CombinedResource._(
resourceA: rA,
resourceB: rB,
);
}
这导致了另一个问题,我无法创建 CombinedResource 的实例:
CombinedResource.create(
Resource(data:"sdc"), Resource(data:"sdc"));
The argument type 'String' can't be assigned to the parameter type 'Resource<String>?'.
我在这里做错了什么?
更新: 第二种方法效果很好。
【问题讨论】:
-
我无法重现您的第二个版本的任何问题。
标签: dart dart-generics