2016-11-09 8 views
1

を入力します問題は、最初の(ItemContainer)ジェネリックパラメータが2番目の(List)と同じかどうかは不明です。良い解決策は、メソッドにジェネリック下限タイプを定義することができますJavaメソッドは、私が有界型パラメータで、次のクラスを持っている。例えば

public <S super T> void putItems() { 
    ItemContainer<S> itemContainer = getItemContainer(); 
    List<S> items = getItems(); 
    itemContainer.addItems(items); // ok 
} 

しかし、意外にも(私のためなど)、そのような構文( slightly unconvincing reason)はありません!
この問題を解決する方法はありますか?私は、(私の場合は)第1と第2のパラメータが同じであると確信していますが、私はそれをJavaに説明する方法はわかりません。

答えて

1

あなたが正しいのは、同じスーパーを持っているにもかかわらず、2つのインスタンスが同じクラスでなく、実行時の例外を避けるためです。あなたは常に同じクラスのものになると確信しているので、itemContainerとアイテムに同じTypeを使用しないのはなぜですか?

ItemContainer<T> itemContainer = new ItemContainer<>(); 
    List<T> items = new ArrayList<>(); 
+0

itemContainerとitemsのジェネリック型パラメータは、Tのスーパータイプ(クラスヘッダで定義されている)である必要があるためです。 –

+0

@DenisDorohov:「Tのスーパータイプ」「T」のスーパータイプはありません。 '?スーパーT 'は、 'T'自身、' T'の直接スーパークラス、そのクラスのスーパークラスなど(実装されたインタフェースを含む)など、 'T'のスーパータイプである任意のタイプであることを意味しますオブジェクトに変換する。 – newacct

関連する問題