抽象类是否可以具有其他抽象类的返回类型的方法?

时间:2020-05-12 18:58:55

标签: flutter dart

我的flutter / dart应用程序将Provider程序包与各种身份验证服务(例如Google,Apple,Firebase等)一起使用。我希望我的抽象类为各种实现提供更多指导,例如:

abstract class AuthService{
    Future<User> signIn();
}

abstract class User{}

实际上,我必须将其实现为:

abstract class AuthService{
    Future<dynamic> signIn();
}

因为我的AuthService的特定实现不会返回用户,而是FirebaseUser或AppleUser。有没有一种方法可以将返回类型指定为抽象User类的某种实现?

2 个答案:

答案 0 :(得分:1)

这与返回任何种类的抽象基类并没有什么不同;构造一个具体类的实例并返回它。

abstract class AuthService{
    Future<User> signIn();
}

abstract class User{}

class FirebaseUser extends User {}

class FirebaseAuthService extends AuthService {
  @override
  Future<User> signIn() {
    return Future.value(FirebaseUser());
  }
}

答案 1 :(得分:0)

abstract class AuthService<T>{
    Future<T> signIn();
}

class ExampleAuthService extends AuthService<FirebaseUser> {
  @override
  Future<FirebaseUser> signIn() {
    throw UnimplementedError();
  }

}