Я хочу написать универсальный класс, который является первым в первой вышли очередь с основным Пушем и попами операций, вот класс:неполной копия с родовым типом
class queue<E>
{
protected final class elem
{
public E val;
public elem next=null;
public elem(){}
public elem(E v)
{
val=v;
}
}
protected elem head=null,tail=null;
public queue()
{
}
public queue(E v)
{
head=new elem(v);
}
public void push(E v)
{
if(head==null)
head=tail=new elem(v);
else if(head==tail)
{
tail=new elem(v);
head.next=tail;
}
else
{
elem t=new elem(v);
tail.next=t;
tail=t;
t=null;
}
}
public final E peek()
{
return ((tail!=null)?tail.val:null);
}
public E pop()
{
if(head==null)
return null;
E i=head.val;
if(head!=tail)
head=head.next;
else
head=tail=null;
return i;
}
}
Проблема заключается в эль конструктор здесь:
public elem(E v)
{
val=v;
}
Я не хочу, чтобы назначить ст ВАЛ, но я хочу, чтобы клонировать его (мелкую копию).
вот что я пробовал:
1- метод clone: ну, поскольку он защищен в классе Object, я не могу получить к нему доступ из переменной E.
2-queue<E extends Cloneable>
: не удалось решить проблему, на самом деле Cloneable - это пустой интерфейс, он не добавляет никаких методов.
3- Использование приоритета: это может быть проще, чем писать класс очереди самостоятельно, но я не хочу приоритета, а только структуру Fifo.
реализация интерфейса очереди: в котором вы должны реализовать множество методов, которые большинство из них мне не нужны, также я все же должен клонировать сам.
Итак, что попробовать дальше?
@Tala спасибо, это первый раз, я отправляю код. – niceman
Мета-комментарий: это не будет легко сделать, потому что это не идиоматическая Java, чтобы сделать копию в такой ситуации. Почему вы хотите получить копию в первую очередь, а не просто хранить предоставленную ссылку? – jacobm
Сохранение ссылки может открыть объект, привязанный к нему для изменения, и я не хочу этого. – niceman