2013-05-21 4 views
0

Я думаю, что лучший способ описать мой вопрос - описать, что я делаю в первую очередь.Заменить для операторов if при использовании констант

У меня есть простая деятельность с 3 параметрами listpick (кнопки, запускающие список). Каждый ListPicker имеет 8 элементов в ListView.

Каждый элемент в Listview, назовем его значением Name, имеет соответствующий адрес и телефон.

Так вот пример из constatns Я использую

public final String GROUP_1_VENUE_1_NAME = "1name1"; 
public final String GROUP_1_VENUE_1_ADDRESS = "1address1"; 
public final String GROUP_1_VENUE_1_PHONE = "1phone1"; 
public final String GROUP_1_VENUE_2_NAME = "1name2"; 
public final String GROUP_1_VENUE_2_ADDRESS = "1address2"; 
public final String GROUP_1_VENUE_2_PHONE = "1phone2"; 
public final String GROUP_1_VENUE_3_NAME = "1name3"; 
public final String GROUP_1_VENUE_3_ADDRESS = "1address3"; 
public final String GROUP_1_VENUE_3_PHONE = "1phone3"; 
..... 

public final String GROUP_2_VENUE_1_NAME = "2name1"; 
public final String GROUP_2_VENUE_1_ADDRESS = "2address1"; 
public final String GROUP_2_VENUE_1_PHONE = "2phone1"; 
public final String GROUP_2_VENUE_2_NAME = "2name2"; 
public final String GROUP_2_VENUE_2_ADDRESS = "2address2"; 
public final String GROUP_2_VENUE_2_PHONE = "2phone2"; 
.... 

public final String GROUP_3_VENUE_1_NAME = "3name1"; 
public final String GROUP_3_VENUE_1_ADDRESS = "3address1"; 
public final String GROUP_3_VENUE_1_PHONE = "3phone1"; 
public final String GROUP_3_VENUE_2_NAME = "3name2"; 
public final String GROUP_3_VENUE_2_ADDRESS = "3address2"; 
public final String GROUP_3_VENUE_2_PHONE = "3phone2"; 
... 

Так элемент получает взял из listPicker, и теперь я хочу, чтобы оценить результат

У меня есть 3 строки, которые нужно быть установленным; имя, адрес и телефон

так что сейчас у меня есть что-то вроде этого ...

if (selection.equals(GROUP_1_VENUE_1_NAME) { 
    name = GROUP_1_VENUE_1_NAME; 
    address = GROUP_1_VENUE_1_ADDRESS; 
    phone = GROUP_1_VENUE_1_PHONE; 
} else if (selection.equals(GROUP_1_VENUE_2_NAME) { 
    name = GROUP_1_VENUE_2_NAME; 
    address = GROUP_1_VENUE_2_ADDRESS; 
    phone = GROUP_1_VENUE_2_PHONE; 
} else if ..... 

и так далее, и так далее.

Итак, вот мой вопрос. Есть ли более простой способ сделать это, что позволяет мне оценить, является ли выбор равным одному из NAME CONSTANTS, и если да, задайте соответствующие значения?

+0

Моя первая мысль - это хэш-карта, содержащая установленные значения. Ключом будет 'selection'.Хотя, я не уверен, что код будет таким же читаемым. – keyser

+0

Сохраните строки в массивах и используйте «переключатель»? –

+1

Я думаю, это должно быть опечатка здесь, 'phone = GROUP_1_VENUE_1_NAME;', это должно быть 'phone = GROUP_1_VENUE_1_PHONE;' –

ответ

0

использовать enum для ваших постоянных. После этого вы можете установить его красиво и переключиться на него тоже :)

3

Я думаю, что вам нужно улучшить свой код в двух следующих направлениях:

Создать новый простой класс, объединяющее имя, телефон и адрес:

class Contact { 
    private final String name; 
    private final String phone; 
    private final String address; 

    public Contact(String name, String phone, String address) { 
     this.name = name; 
     this.phone = phone; 
     this.address = address; 
    } 
    // getters 
} 

Используйте карту для отображения магазина выбора:

private static final Map<String, Contact> selections = new HashMap<String, Contact>(); 
static { 
    selections.put("3name1", new Contact("name1", "phone1", "address1")); 
    // other selections 
} 

Тогда вы можете получить доступ к контактам, просматривая карту:

Contact contact = selections.get(selection); 
0

Вы могли бы подготовить карту каждый для адресов и телефонов типа Map<String, String>

Тогда вы просто должны проверить, является ли известно имя (или пропустить часть, если вход всегда известно), и затем заполнить значения, а именно:

// Preparation 
addresses.put(GROUP_1_VENUE_1_NAME, GROUP_1_VENUE_1_ADDRESS); 
phones.put(GROUP_1_VENUE_1_NAME, GROUP_1_VENUE_1_PHONE); 

... 

// Evaluation  
name = selection; 
address = addresses.get(name); 
phone = phones.get(name); 
0

Один лучше OOP путь будет в герметизированных смежных областях сидели в Person классе:

public class Person{ 
String name; 
String address; 
String phone; 
} 

, а затем использовать Map<String, Person>, заполнить его с объектами человека и связаны с определенным именем, то в момент выбора вы могли бы просто иметь логику как:

Person selectedPerson = map.get(selection); 

и использовать Person атрибуты (имя, адрес, телефон) где вы хотите.

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