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

您需要在调用复制构造函数之前将您的p1转换为。B<Integer>

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

或者您可以定义另一个接受接口类型的构造函数,例如

    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
     }



}

然后你可以同时使用 A 和 B 作为一个有效的 cons 参数;

    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 回答