- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想编写一个通用类,它是一个先进先出队列,具有基本的 Push 和 Pop 操作,下面是该类:
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;
}
}
问题出在 elem 构造函数中:
public elem(E v)
{
val=v;
}
我不想将 v 分配给 val,但我想克隆它(浅拷贝)。
这是我尝试过的事情:
1- 克隆方法:因为它在 Object 类中 protected ,所以我无法从 E 变量访问它。
2- queue<E extends Cloneable>
:没有解决问题,实际上Cloneable是一个空接口(interface),它没有添加任何方法。
3- 使用优先级队列:这可能比自己编写队列类更容易,但我不需要优先级,只需要 Fifo 结构。
4-实现队列接口(interface):其中必须实现很多方法,其中大部分我不需要,而且我仍然需要自己克隆。
那么,接下来要尝试什么?
最佳答案
您可以创建接口(interface)CustomCloneable
:
interface CustomCloneable {
public CustomCloneable clone();
}
并根据您的情况使用它。请注意,您必须为您的类提供克隆实现或使用下面描述的方法/库。
class Queue<E extends CustomCloneable>
之后,您可以在您的
上调用clone
方法
public Elem(E v) {
val = (E) v.clone();
}
另一方面您可能正在寻找其他东西。 Refer here了解其他选项以及为什么应避免克隆。
Instead of that use some other options, like apache-commons [
SerializationUtils
][1] (deep-clone) orBeanUtils
(shallow-clone), or simply use a copy-constructor.
关于java - 泛型类型的浅拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18465566/
我是一名优秀的程序员,十分优秀!