有没有一种方法可以让泛型类型的接口在Java中扩展为另一个泛型类型的接口?

时间:2019-02-12 02:17:38

标签: java

我想创建一个这样的界面

public interface MyInterface<T extends OtherInterface<K>>{
    K doSomething(T o);
}

,但是编译器无法识别。 另一种方法是:

public interface MyInterface<T extends OtherInterface<K>,K>{
    K doSomething(T o);
}

我的问题是,尽管第二个代码可以工作,但有没有像第一个代码那样的方式,所以我不必放置两种类型来声明接口?

1 个答案:

答案 0 :(得分:0)

如果您有一个带有两个类型参数的通用接口,则需要在类签名中将它们都声明。

或者,如果将K声明为通配符?并仅返回T,您仍然可以将输出T投射到正确的接口。例如:

interface Foo<T> { }

interface Bar<T extends Foo<?>>{
    T doSomething(T o);
}

class IntegerFoo implements Foo<Integer> {}
...

public static void main(String[] args) {
    IntegerFoo integerFoo = new IntegerFoo();

    Bar<IntegerFoo> bar = t -> t;

    Foo<Integer> result = bar.doSomething(integerFoo);
}