java - 将非泛型类扩展为泛型类

标签 java list collections queue

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/

相关文章:

kotlin - Kotlin 1.4 中 sumOf() 和 sumBy() 有什么区别?

java - Arrays.asList() 与 Collections.singletonList()

java - 启用/禁用与某些方法关联的 JButton

java - 如何删除项目层次结构栏下方的栏?

python - 在子子列表中查找元素的索引

Python:如何先读取一个元素,然后读取两个元素?

java - 添加到集合然后对其进行排序或添加到已排序的集合中是否更快?

java - 使用 java -server 选项

java - java中随机生成一大块数字字符串

python - 尝试索引字符串列表并根据其索引删除字符串