org.apache.commons.collections.buffer包中的Java类CircularFifoBuffer是非泛型的,可以存储任何类的对象。
我想创建一个通用版本,它只能保存类 T 的对象。我的第一个想法是扩展 CircularFifoBuffer 并简单地编写一个新的“add”方法:
public class CircularFifoQueue<T> extends CircularFifoBuffer {
public boolean add(T data) {
return super.add(data);
}
}
但是,这保留了旧的“add”方法,允许添加任意类的对象。有没有办法解决这个问题,使用继承而不是组合(这样我就不必重新实现 CircularFifoBuffer 的所有方法),但阻止该类的用户添加非 T 对象?
最佳答案
一个想法是实现您自己的缓冲区,仅包装原始缓冲区:
public class CircularFifoQueue<T> {
private CircularFifoBuffer buffer = new CircularFifoBuffer();
public boolean add(T data) {
return buffer.add(data);
}
// implement all other methods that are needed
}
因此,内部缓冲区占用了所有内容,但包装器确保只能添加 T
类型对象。问题:现在缓冲区没有实现任何接口(interface)。因此它的使用现在有点受限(例如,如果您需要发送 Buffer
,则无法使用它)
关于java - 将非泛型类扩展为泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6057826/