【发布时间】:2017-05-01 22:54:08
【问题描述】:
我有一个枚举
Customer("Customer"),
BankName("Bank Name"),
AccountNumber("Account Number"),
Amount("Available Amount");
我有一个整数数组,其中包含正确的顺序
private static int[] realOrder;
我有一个按正确顺序对枚举进行排序的方法
public static void configureColumns(Column... newOrder)
{
realOrder = new int[values().length];
for (Column column : values())
{
realOrder[column.ordinal()] = -1;
boolean isFound = false;
for (int i = 0; i < newOrder.length; i++)
{
if (column == newOrder[i])
{
if (isFound)
{
throw new IllegalArgumentException("Column '" + column.columnName + "' is already configured.");
}
realOrder[column.ordinal()] = i;
isFound = true;
}
}
}
}
当我这样调用那个方法时
Column.configureColumns(Column.Amount, Column.AccountNumber, Column.BankName);
我想打印出来
* Available Amount
* Account Number
* Bank Name
我有一个方法,根据 realOrder 索引返回一个链表
public static List<Column> getVisibleColumns()
{
List<Column> result = new LinkedList<>();
int index;
for(int i = 0; i < realOrder.length; i++)
{
if(realOrder[i]!=-1)
{
index = realOrder[i];
result.add(index, Column.values()[index]);
}
}
return result;
}
但我得到java.lang.IndexOutOfBoundsException: Index: 2, Size: 0 因为我应该从 0 开始填充数组。如果我从最小到最大对 realOrder 数组进行排序,它可以工作,但不是它预期的方式。我该如何解决?
【问题讨论】:
-
你正在做一些非常奇怪和不必要的事情。您正在为一种方法下达自己的命令,为什么要排序等等?我建议完全改变设计,甚至给枚举本身添加另一个参数会更好,比如
Customer("Customer", 2)。