java:将参数传递给复制构造函数

时间:2012-11-24 21:11:23

标签: java copy-constructor

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&lt; A&lt; Integer&gt;&gt;找到合适的构造函数”

我应该更改或添加什么?

3 个答案:

答案 0 :(得分:2)

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

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

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

    public B(A<E> other)  // copy constructor
    {
         //type cast here and use it
    }

答案 1 :(得分:1)

将其更改为

或致电p2 = new B<Integer>( (B<Integer>)p1);

因为您要做的是将A<Integer>发送到构造函数中的B。 最终它是

B b = element of type A<Integer>

由于参数类型的反方差,这是错误的。根据设计更改B构造函数中的参数类型,或执行上面提到的

答案 2 :(得分: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);