2015-10-01 2 views
0

У меня есть требование, когда только на основе определенного условия, мне нужно инициализировать массив класса типа. Поэтому я пытаюсь вставить оператор switch внутри массива типа type, как показано ниже.Как добавить оператор 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); 
        }; 
      } 
} 

Но я получаю сообщение об ошибке. Не могли бы вы указать мне в правильном направлении или любую другую логику для того же самого. Спасибо

+0

Не могли бы вы высказать ошибку, которую вы получаете? –

+0

Какая ошибка. Где вы объявляете массив? –

ответ

3

Успение: Для каждого значения вы добавите объект SyncPreferenceItem.

Вы можете добавить заявление break после утверждения второго случая. Хотя это и не является обязательным требованием, потому что после этого случая у вас нет ничего другого. Но может спасти вас от будущих ошибок.

Объявите и инициализируйте массив снаружи для цикла и добавьте объект с помощью переключателя.

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; 
    } 
} 

Если вы не уверены, сколько объектов вы собираетесь создать внутри цикл затем использовать 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; 
    } 
    } 
+0

Привет, Хоббит, Большое спасибо за ответ. Я проверю и дам вам знать – coders

+0

В заявлении дела отсутствует прорыв. –

+0

@akhil_mittal последнее утверждение не обязательно должно иметь оператор break. потому что после этого ничего не происходит. – YoungHobbit

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. В каждом случае оператор должен иметь элемент break else, который пропустит следующий случай.
  4. В случае, если элементы не являются динамическими, лучше использовать ArrayList.
  5. В коде OP отсутствует код по умолчанию, который также должен быть добавлен, потому что нет гарантии, что входы для переключения всегда будут VISIT и CUSTOMERS. Если что-то еще есть, должен быть некоторый код для обработки этого случая по умолчанию.
+0

Спасибо Akhil за ответ. Конечно, я позабочусь о тех моментах, которые вы предложили. – coders

Смежные вопросы