1

だから私は2つのクラスがあります。クラスBはクラスを拡張しAます。ArrayListタイプのオブジェクトを含むオブジェクトを作成しているBので、リストはタイプArrayList<B>です。入力パラメータタイプが。ArrayListのメソッドで使用したいと思います。はの子クラスであるため、このアプリケーションを含め、どこでも使用できるのは当然のことです。useListArrayList<A>BAA

ただし、コンパイラはこれを好まないようです(以下のコードのエラーメッセージを参照してください)。メソッドに渡すときにもキャストしようとArrayList<B>ArrayList<A>ましたが、それも機能しませんでした。

コード:

public class Test {
    private class A { }
    private class B extends A { }
    public static void useList(ArrayList<A> aList) { }

    public static void main(String[] args) {

        ArrayList<B> bList = new ArrayList<B>();

        /* "The method test(ArrayList<Test.A>) in the type Test
         * is not applicable for the arguments (ArrayList<Test.B>)" */
        useList(bList); 

        /* "Cannot cast from ArrayList<Test.B> to ArrayList<Test.A>" */
        useList((ArrayList<A>)bList);
    }
}

私は間違いなく愚かなことをしているので、アドバイスをいただければ幸いです。

ありがとう!

4

1 に答える 1

3

拡張する要素を持つuseListタイプのパラメータを期待することを宣言するだけです:ArrayListA

public static void useList(ArrayList<? extends A> aList) { }
于 2012-07-22T23:13:59.110 に答える