0
Inside of class ATester
{
   private A<Integer> p1,p2;

    p1 = new B<Integer>();
    p2 = new B<Integer>( p1);

}

public class B<E extends Comparable<? super E>> implements A<E>
{
     public B()   // default constructor
     {
        // skip
     }

     public B(B other)  // copy constructor
     {
        // skip
     }

}

別の B を引数として取るコピー コンストラクターを定義したいのですが、p1 を

p2 = new B<Integer>( p1);

コンパイルすると、エラーメッセージが表示されます

「B< A < Integer > > に適したコンストラクタが見つかりませんでした」

何を変更または追加する必要がありますか?

4

3 に答える 3

2

コピー コンストラクターを呼び出す前に、 p1toをキャストする必要があります。B<Integer>

    p2 = new B<Integer>( (B<Integer>)p1);

または、Interface タイプを受け入れる別のコンストラクターを定義することもできます。

    public B(A<E> other)  // copy constructor
    {
         //type cast here and use it
    }
于 2012-11-24T21:21:16.870 に答える
1

に変更します

または次のように呼び出しますp2 = new B<Integer>( (B<Integer>)p1);

あなたがやろうとしているのは、コンストラクターで送信A<Integer>するためです。B最終的にはそうです

B b = element of type A<Integer>

引数の型の反分散が原因で、これは間違っています。設計に従ってコンストラクターの引数の型を変更するかB、上記の手順を実行します

于 2012-11-24T21:18:56.053 に答える
0

B は既に A を実装しているため、コンストラクター arg を B から A に変更します。

public class B<E extends Comparable<? super E>> implements A<E>
{
     public B()   // default constructor
     {
        // skip
     }

     public B(A other)  // copy constructor
     {
        // skip
     }



}

次に、有効な cons パラメータとして A と B の両方を使用できます。

    A<Integer> p1, p2;
    B<Integer> c = new B<Integer>();

    p1 = new B<Integer>(c);
    p2 = new B<Integer>( p1);
于 2012-11-24T21:24:51.940 に答える