Iniciante em Dart aqui.
abstract class Supertype {
WithQuantity<Supertype> newQuantity(num quantity) =>
WithQuantity(this, quantity)
}
class Subtype extends Supertype {
}
class WithQuantity<S extends Supertype> {
final S thing;
final num quantity;
WithQuantity(this.thing, this.quantity);
}
void main() {
WithQuantity<Subtype> quantityOfSubtype = Subtype().newQuantity(5);
}
Eu gostaria que a última linha fosse compilada.
Nesta versão é claro que não, porque newQuantity
retorna WithQuantity<Supertype>
, não WithQuantity<Subtype>
.
Posso substituir o newQuantity
método para tornar o tipo de retorno mais restrito, mas teria que fazer isso para cada subclasse separadamente; parece duplicado.
Em Java eu poderia ter feito algo assim:
class Supertype<S extends Supertype> {
WithQuantity<S> newQuantity(...);
}
Mas Dart não gosta dessa recursão.
Posso de alguma forma dizer ao compilador que preciso retornar WithQuantity<whateverMyRuntimeTypeIs>
?
Obrigado!