Java: передача аргумента в конструктор копирования
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);
при компиляции выдает сообщение об ошибке
msgstr "не найдено подходящего конструктора для B>"
Что я должен изменить или добавить?
3 ответа
Измените это на
Или позвонить как p2 = new B<Integer>( (B<Integer>)p1);
Потому что то, что вы пытаетесь сделать, это отправить A<Integer>
в B
в конструкторе. В конечном итоге это
B b = element of type A<Integer>
Что неправильно из-за противоречивости типа аргумента. Либо измените тип аргумента в вас B
конструктор в соответствии с проектом или сделать вышеупомянутое
Вы должны бросить свой p1
в B<Integer>
перед вызовом конструктора копирования.
p2 = new B<Integer>( (B<Integer>)p1);
Или вы можете определить другой конструктор, принимающий тип интерфейса, например
public B(A<E> other) // copy constructor
{
//type cast here and use it
}
Ваш 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);