泛型类型可以实现多个抽象类吗?

时间:2019-09-25 10:31:05

标签: dart

我想创建一个通用类型的方法,该方法实现两个不同的抽象类

List<T> myMethod<T implements A, B>(

似乎编译器不允许这样做,并且extends关键字仅承认第一类,是否有另一种方法可以实现?如果有这种可能。

1 个答案:

答案 0 :(得分:1)

要尽可能简短地回答您,是的,这是可能的,而且并非以您想要的方式。

可能的解决方案: 最直接,最简单的方法是制作一个通用的超类,然后扩展/实现您要支持/使用的抽象(或接口)类的数量。

您的案例示例:

List<T> myMethod<T implements A, B>

可能的解决方案是:

  

下面的示例是伪代码。

interface A {
}

interface B {
}

abstract class C implements A, B {
}

class Generic {

   <T extends C> List<T> myMethod(T list){
     // ...
   }

}

注意:如果不想使用抽象类,则可以创建一个接口(例如List),然后在每个实现中使用该接口。您可以(但不是必须)代替泛型,而直接将其用作参数类型List<InterfaceClass>。但是,如果要使用类型参数,在这种情况下仍然可以使用泛型。这样的示例如下:

interface A {
}

class AImpl implements A {
}

class Generic {

    public void init(){
        myMethod(List.of(new AImpl()));
    }

     // You don't have to make use of Type parameters!
     <T extends A> List<T> myMethod(List<T> list){
         //...
     }
}