【发布时间】:2020-12-06 16:52:21
【问题描述】:
考虑我的以下基类:
abstract class IChat<Message extends IMessage> {
String get getId;
List<T> getUsers<T extends IUser>();
}
现在我的扩展模型如下所示:
class Chat extends IChat<ChatMessage> {
String id;
List<ChatUser> members;
Chat({this.chat, this.members});
@override
String get getId => id;
@override
List<T> getUsers<T extends IUser>() => members;
}
List<T> getUsers<T extends IUser>() => members; 引发错误,因为我返回 List<ChatUser> 而不是 List<T>。如何覆盖该方法以使其正常工作?我的ChatUser 类显然也扩展了IUser。
编辑
@jamesdlin 给出了一种解决方案:@override List<T> getUsers<T extends IUser>() => members.cast<T>()。不用类型转换也可以吗?
【问题讨论】:
-
您应该能够在通用函数中使用您的类型,即:
List<ChatUser> getUsers<ChatUser>() => members; -
@Mattia 感谢您的回复。可悲的是,这也会引发错误:
'Chat.getUsers' ('List<ChatUser> Function<ChatUser>()') isn't a valid override of 'IChat.getUsers' ('List<T> Function<T extends IUser>()'). -
我不知道是否有更好的方法,但
@override List<T> getUsers<T extends IUser>() => members.cast<T>();有效。 -
@jamesdlin 很好,谢谢。但是没有类型转换就没有办法了吗?
标签: dart generic-list