当社は現在、以下の短縮クラス6. OpenJDKのでコンパイルされません一つのクラスは、このエラーを再現していますジェネリック問題 - 推論タイプ(s)がバインドされた宣言に準拠していない
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);
}
それは神託のJavaバージョンでコンパイルし、7をOpenJDKの - しかし、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
の実装を変更する方法をいくつかのアイデアです。私も...コンパイラの警告を気にしないだろう
はバグのようです。 EclipseコンパイラとSunのコンパイラはこれについて何も言わない。 –
@GuillaumePolet - Javaバージョンのジェネリック型のバグまたは過度の厳密な処理。そして、はい、日食は(ビルドを殺すこの厄介なエラーを再現するにはかなり複雑になった)不平を言っていません。 –