有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我应该使用枚举集吗?

我正在尝试构建一个“平面文件阅读器”这些文件将有几个相关列,如“客户名称”、“电话”等,但每个平面文件的列号将不同;此外,一些平面文件将包含其他平面文件不包含的列

我希望FlatFileReader类能够读取这些不同的文件。所以我为第一个平面文件创建了一个枚举,其中的值是数组的索引

enum Columns { NAME, TELEPHONE, PAYMENT }
...
String[] columns = new String[3];
columns[0] = line.substring(0,29); //Name
columns[1] = line.substring(30,36); //Telephone
columns[2] = line.substring(37); //Payment

例如,为了从平面文件中获取名称,FlatFileReader将调用以下方法:

file.get (Columns.NAME);

FlatFileA将查找索引0。将会有各种各样的平面文件类,我希望每个类都继承相同的枚举,以便保持一致;问题是有些文件没有特定的列。因此,如果FlatFileB没有电话列,我就不能在父类(或接口)中进行名称、电话和付款

我怎样才能解决这个问题?枚举集就是这样使用的吗?每个子类能否创建一个枚举集,并且只添加它需要的常量?如果我创建了一个枚举集,并且只添加了名称和付款,那么付款现在的值是1(在枚举集中)还是仍然是2


共 (2) 个答案

  1. # 1 楼答案

    EnumSet只是Set接口的另一个实现。实现Set接口意味着它的行为与任何其他实现的Set一样。不同之处在于性能、可接受值和迭代顺序

    枚举集的优点是速度,缺点是枚举集只能将枚举常量作为成员。由于每个枚举常量都有一个从零开始的序号(),因此枚举集使用位字符串表示,其中每个位表示集合中是否存在元素。选择EnumSet使包含(全部)、添加(全部)、删除(全部)和保留(全部)的运行速度比树集和哈希集快得多

    不,枚举常量永远不会改变它的序数()(尽管我不确定这是否是你的意思)

  2. # 2 楼答案

    我建议使用ArrayList,因为您的列是按顺序排列的。我进一步建议您使用ArrayList个对象,这些对象封装了Column以及有关如何从记录中收集列的详细信息

    class Field {
      Columns col;
      int start;
      int length;
    }
    
    ArrayList<Field> file1Record = new ArrayList<Field>();
    
    // You could calculate the 0 and 29 on the fly.
    file1Record.add(new Field(Columns.NAME, 0, 29));
    ...