泛型问题 - 推断类型不符合声明的边界

时间:2012-04-03 15:37:45

标签: java generics

我们目前有一个类不能用openjdk 6编译。以下缩短的类重现了这个错误:

public class Copy implements ICopy {        
    public <A,B extends List<A>,C extends Map<A,B>> A method(A a, B b) {
        A something = null;
        return something;
    }

    @Override
    public <A,B extends List<A>> A method2(A a, B b) {
        return method(a,b);
    }    
}

界面很简单,只是显示,我们无法更改method2的签名:

public interface ICopy {    
    public <A,B extends List<A>> A method2(A a, B b);
}

它使用oracles java版本和openjdk 7编译 - 但是使用openjdk 6失败了,不幸的是,这是我们用来编译(原始)代码的版本。

错误消息是

Copy.java:15: invalid inferred types for C; inferred type does not conform to declared bound(s)
inferred: java.util.Map<A,B>
bound(s): java.util.Map<A,B>
                return method(a,b);
                             ^

我需要的是如何改变method2的实现以便编译的一些想法。我甚至不关心编译器警告...

1 个答案:

答案 0 :(得分:11)

我会尝试明确指定边界,如下所示:

return this.<A,B,Map<A,B>>method(a,b);

但是,更一般地说,我根本不需要类型参数Cmethod的参数或其返回类型都没有引用C,因此如果您可以更改method的签名,我将完全省略该类型参数。