我想创建一个通用类型的方法,该方法实现两个不同的抽象类
List<T> myMethod<T implements A, B>(
似乎编译器不允许这样做,并且extends
关键字仅承认第一类,是否有另一种方法可以实现?如果有这种可能。
答案 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){
//...
}
}