私はFooとFooを実装するenum Barを持っています。次に、単純なビルダーパターンクラスのResultを使用しています。以下のコードを参照してください。Javaジェネリックは、型引数としてインタフェースを持ち、ビルダパターンを使用しています。
public interface Foo {}
public enum Bar implements Foo { BAR }
public class Result<T> {
public Result(T result) {}
public static <T> Result<T> of(T result) {
return new Result<>(result);
}
public Result<T> set() {
return this;
}
}
タイプBar.BARの検索結果を構築し、結果<はFoo >変数に代入しようとすると、これは正常に動作します:
Result<Foo> r1 = Result.of(Bar.BAR);
をしかしfolowingは、コンパイルエラーが得られます。
をResult<Foo> r2 = Result.of(Bar.BAR).set();
互換性のないタイプです。結果:<Foo>、結果:<バー>
誰でも説明してください。
なぜ私は最初と2番目ではないが、なぜ結果を宣言しようとしているのか分かりません。 extends Foo> r2 = ... ' – Jason
このコンパイルを行う最良の方法は' Result r2 = Resultです。 (Bar.BAR).set(); 'のです。 Java 8の型推論は大幅に改善されていますが、このようなメソッドを連結するときには、型パラメータを明示的に指定する必要があります。 –