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);
}
答案 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)
没有;因为A
和B
之间没有隐含关系,除了work
方法的巧合实现(并且使用不同的签名启动),唯一的方法是重载方法。
public void foo(A<?> bar) { }
public void foo(B bar) { }