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
# 1 楼答案
EnumSet只是Set接口的另一个实现。实现Set接口意味着它的行为与任何其他实现的Set一样。不同之处在于性能、可接受值和迭代顺序
枚举集的优点是速度,缺点是枚举集只能将枚举常量作为成员。由于每个枚举常量都有一个从零开始的序号(),因此枚举集使用位字符串表示,其中每个位表示集合中是否存在元素。选择EnumSet使包含(全部)、添加(全部)、删除(全部)和保留(全部)的运行速度比树集和哈希集快得多
不,枚举常量永远不会改变它的序数()(尽管我不确定这是否是你的意思)
# 2 楼答案
我建议使用
ArrayList
,因为您的列是按顺序排列的。我进一步建议您使用ArrayList
个对象,这些对象封装了Column
以及有关如何从记录中收集列的详细信息