java - 如何使 IntArrayBag 通用?

标签 java generics collections

这是IntArrayBag我说的是。为了解决这个问题,这里是数据字段和构造函数:

   private int[ ] data;
   private int manyItems;

   public IntArrayBag( )
   {
      final int INITIAL_CAPACITY = 10;
      manyItems = 0;
      data = new int[INITIAL_CAPACITY];
   }

我的问题是,如何使此类通用,以便该方法将任何类型的对象作为参数(而不是整数)?我正在考虑使数组通用,但根据 this答案数组不能是通用的且 this回答指出您不能拥有通用数据字段。

那么如何使这个类变得通用呢?谢谢!

最佳答案

您可以使用 List<T> 使该类通用:

public class ArrayBag<T> {
    private List<T> data;
    private int manyItems;
    public IntArrayBag() {
        final int INITIAL_CAPACITY = 10;
        manyItems = 0;
        data = new ArrayList<T>();
   }
}

这将处理非原始类型。基元需要装箱,使得该类不太适合与 int 一起使用。 s,long

请注意,您需要使用 equals代替==在这样的情况下:

if (target == data[index]) ...

上面应该重写为

if (target.equals(data[index])) ...

检查后target对于 null .

您还可以“搭载”ArrayList<T>自动增长的能力,这将使您可以从类中删除数组增长逻辑。

关于java - 如何使 IntArrayBag 通用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49614015/

相关文章:

java - 如果我同时插入相同的内容,两个 HashMap 是否应该以相同的顺序存储

c# - 从哈希表中读取匹配的记录到类对象中

java - 最大限度地减少 Spring Web 服务渲染 JSON 数据时要序列化的数据

java - 突变测试 - 以 for-each 循环为条件否定?

java - 我们应该始终在 JBoss 应用程序的客户端关闭 javax.naming.InitialContext 吗?

java - 泛型方法 : static vs NON-static

java - 泛型是否在编译时被编译器移除

c# - 在 C# 中枚举集合的子集?

java - sqlite 查询 Android 时出错

Java:一般返回由参数指定的类型化Set