gpt4 book ai didi

generics - 在 Dart 中,子类如何扩展父类(super class),让子类的泛型类型扩展父类(super class)的类型?

转载 作者:IT老高 更新时间:2023-10-28 12:46:04 27 4
gpt4 key购买 nike

这是一个 Dart 泛型 问题。这个问题看起来很简单,请继续阅读。

我有:

  • 类 SomeController 使用类型 T
  • 类 ExtendedController 使用类型 S
  • ExtendedController 扩展了 SomeController
  • S 扩展了 T。

以下代码不起作用:

import 'package:flutter/material.dart';

class SomeValue {}

class ExtendedValue extends SomeValue {}

abstract class SomeController<T extends SomeValue> extends ValueNotifier<T> {
SomeController(T value) : super(value);

factory SomeController.create() {
return ExtendedController();
}
}

class ExtendedController extends SomeController<ExtendedValue> {
ExtendedController() : super(ExtendedValue());
}

我得到错误:

The return type 'ExtendedController' isn't a 'SomeController<T>', as defined by the method 'create'.

return ExtendedController();行。

然后我把它改成了这样:

import 'package:flutter/material.dart';

class SomeValue {}

class ExtendedValue extends SomeValue {}

abstract class SomeController<T extends SomeValue> extends ValueNotifier<T> {
SomeController(T value) : super(value);

factory SomeController.create() {
return ExtendedController();
}
}

class ExtendedController<S extends ExtendedValue> extends SomeController<S> {
ExtendedController() : super(ExtendedValue());
}

仍然不起作用,但现在我收到另一个错误: The constructor returns type 'ExtendedValue' that isn't of expected type 'S'.

这次是在 super(ExtendedValue());行。

最佳答案

显式转换修复它:

  factory SomeController.create() {
return ExtendedController() as SomeController<T>;
}

https://groups.google.com/a/dartlang.org/forum/#!topic/misc/bVRHdagR8Tw

你也可以使用

  static create() {
return ExtendedController() as SomeController<T>;
}

有了可选的new就没有区别了。

关于generics - 在 Dart 中,子类如何扩展父类(super class),让子类的泛型类型扩展父类(super class)的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52124639/

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