如何在类型类的数组中添加switch语句?

时间:2015-10-01 04:20:02

标签: java arrays switch-statement

我有要求仅基于特定条件,我需要初始化类型类的数组。所以我在类型类的数组中尝试插入switch语句,如下所示。

 for (int i=0;i <testChildData.size();i++ )
        {
            switch (testChildData.get(i)) {
                SyncPreferenceItem[] syncCategoryList = {
                case "VISIT":
                    new SyncPreferenceItem(R.drawable.sync_visit, R.string.PrefVisits,
                            SynchronizationManager.SYNC_CATEGORY_TYPE.VISITS);
                    break;
                case "CUSTOMERS":
                    new SyncPreferenceItem(R.drawable.sync_customer, R.string.Customers,
                            SynchronizationManager.SYNC_CATEGORY_TYPE.CUSTOMERS);
                    };
            }
} 

但是我收到了错误。能不能指出我正确的方向或任何其他相同的逻辑。谢谢

2 个答案:

答案 0 :(得分:3)

假设:对于每个值,您将添加SyncPreferenceItem的对象。

您可以在第二个案例陈述后添加 break 语句。即使这不是一个要求,因为在该案例陈述之后你还没有其他任何东西。但是可以避免将来的错误。

声明并初始化for循环外的数组,并使用switch添加对象。

syncCategoryList = new SyncPreferenceItem[testChildData.size()];
for (int i=0;i <testChildData.size();i++ ) {
  switch (testChildData.get(i)) {
    case "VISIT":
      syncCategoryList[i] = new SyncPreferenceItem(R.drawable.sync_visit, R.string.PrefVisits,
          SynchronizationManager.SYNC_CATEGORY_TYPE.VISITS);
      break;
    case "CUSTOMERS":
      syncCategoryList[i] =  new SyncPreferenceItem(R.drawable.sync_customer, R.string.Customers,
          SynchronizationManager.SYNC_CATEGORY_TYPE.CUSTOMERS);
      break;
  }
}

如果您不确定要在for循环中创建多少个对象,请使用ArrayList而不是SyncPreferenceItem的简单数组;

List<SyncPreferenceItem> syncCategoryList = new ArrayList<>();

  for (int i=0;i <testChildData.size();i++ ) {
    switch (testChildData.get(i)) {
      case "VISIT":
        syncCategoryList.add(new SyncPreferenceItem(R.drawable.sync_visit, R.string.PrefVisits,
            SynchronizationManager.SYNC_CATEGORY_TYPE.VISITS));
        break;
      case "CUSTOMERS":
        syncCategoryList.add(new SyncPreferenceItem(R.drawable.sync_customer, R.string.Customers,
            SynchronizationManager.SYNC_CATEGORY_TYPE.CUSTOMERS));
      break;
    }
  }

答案 1 :(得分:1)

结构错误,因为正确的结构将是:

SyncPreferenceItem[] syncCategoryList = new SyncPreferenceItem [testChildData.size];
for (int i=0;i <testChildData.size();i++ ) {
    switch (testChildData.get(i)) {
        case "VISIT":
            syncCategoryList[i] = new SyncPreferenceItem(R.drawable.sync_visit, R.string.PrefVisits,
                    SynchronizationManager.SYNC_CATEGORY_TYPE.VISITS);
            break;
        case "CUSTOMERS":
            syncCategoryList[i] = new SyncPreferenceItem(R.drawable.sync_customer, R.string.Customers,
                    SynchronizationManager.SYNC_CATEGORY_TYPE.CUSTOMERS);
            break;
    }
}

有以下几点值得注意:

  1. 数组中的所有元素都必须是SyncPreferenceItem类型。
  2. 数组的大小为testChildData.size
  3. 每个case语句都应该有一个break else控件将跳转到下一个case。
  4. 如果没有项目是动态的,最好使用ArrayList
  5. OP的代码中缺少默认情况,因为无法保证切换的输入始终为VISITCUSTOMERS。如果还有其他内容,那么还需要一些代码来处理这个默认情况。