可以是N接口

时间:2016-11-02 02:43:16

标签: java java-8

Java中是否存在使用泛型的方法,允许我指定实现接口A或B的方法参数?

public void foo(Object bar) // bar could either be an implementation of interface A or interface B but nothing else.

private interface A<T>
{
    Object work(final Fizz fizz, final T t);
}

private interface B
{
    Object work(final Fizz fizz);
}

2 个答案:

答案 0 :(得分:3)

一般意义上没有真正的解决方案,但对于您的特定示例,您可以尝试以下方式:

public <T> void foo(A<T> bar) {
    // ...
}

private interface A<T> {
    Object work(final Fizz fizz, final T t);
}

private interface B extends A<Void> {

    default Object work(final Fizz fizz) {
        return work(fizz, null);
    }

    Object work(final Fizz fizz, final Void ignoreMe);
}

答案 1 :(得分:1)

没有;因为AB之间没有隐含关系,除了work方法的巧合实现(并且使用不同的签名启动),唯一的方法是重载方法。

public void foo(A<?> bar) { }

public void foo(B bar) { }