0

我正在尝试验证一组值“RecordStatus”和“Condition”。想出了下面的方法。

  1. 使用字符串 recordStatus 和条件定义类 RecordStatusCodition。

  2. 定义一个类 RecordStatusCoditionValidator 实现如下

ArrayList 有效列表 = 新 ArrayList() {{

                  add(new RecordStatusCodition ("CREATED","A"));
                  add(new RecordStatusCodition ("INSERTED","B"));
                  add(new RecordStatusCodition ("INSERTED","A"));
                  }};
public boolean isProcessed(RecordStatusCodition recordStatusCodition ) {
                    return checkList.contains(recordStatusCodition);
    }
}

正在从我在其他地方的代码中调用此类以检查条件

  if(!RecordStatusCoditionValidator.isProcessed(new RecordStatusCodition("","")))
               // do processing
        }

与上述类似,还有其他各种不同列表的条件,可能需要经常更改

虽然这很好用,但我需要知道是否有更好的方法,因为这是我的大部分代码所依赖的东西?

4

1 回答 1

1

我建议您使用Map(HashMap实现) 而不是ArrayList. 这样,您可以保留对象的标识符(在本例中为Aor B)并将其状态存储为值。然后,您的isProcessed方法可以简化为

map.containsKey(key); //Where key is either "A", "B", etc.

此映射不应该是类中的原始字段。我建议你将它包装在你自己的对象中,你可以在你的应用程序中引用它而不是原始地图。这将使您能够控制不同的操作,并允许您在这些操作中进行一些预处理或后处理。

如果您愿意,您的RecordStatusCondition类也可以重构为枚举,定义给定对象可以具有的条件范围:

RecordStatusCondition.CREATED;
RecordStatusCondition.INSERTED;

然后,您可以像这样添加一个对象:

recordStatusContainer.put(record.getId(), RecordStatusCondition.CREATED);

您也可以使用该方法相当容易地获得状态,get()但请记住,如果您使用游览自己的对象作为键,则必须重新定义hascode()equals()使其正常工作。

作为一个附带建议,如果可能的话,您可以让您的(或此处代表您的主要逻辑单元的任何对象)通过向其添加字段来RecordStatus了解其当前状况。RecordStatusCondition

于 2012-12-11T16:09:23.210 回答