java - 使用常量时替换 if 语句

标签 java android loops if-statement constants

我认为描述我的问题的最佳方式是首先描述我在做什么。

我有一个简单的 Activity ,有 3 个列表选择选项(启动 ListView 的按钮)。 每个 ListPicker 在 ListView 中有 8 个项目。

ListView 中的每个项目,我们称其为名称值,都有相应的地址和电话。

这是我正在使用的常量示例

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 .....

等等等等。

所以,这是我的问题。有没有更简单的方法可以让我评估选择是否等于名称常量之一,如果是,则设置相应的值?

最佳答案

我认为您需要在以下两个方向改进代码:

创建新的简单类来聚合姓名、电话和地址:

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
}

使用Map来存储选择映射:

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

然后您可以通过查找 map 来访问您的联系人:

Contact contact = selections.get(selection);

关于java - 使用常量时替换 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16671579/

相关文章:

javascript - 当键为数字时,for 循环键/值对

java - 如何在单独的 J Frame Form 标签上显示 Java Timer?

java - Criteria 在 order by 子句中使用聚合函数

java - 为什么我无法查看 "JCE"的源代码

android - Jetpack Navigation Deep Link 与错误的 ActionBar 按钮

android - java.lang.IllegalStateException : The specified child already has a parent. 您必须先在 child 的 parent 上调用 removeView()

R - 在循环中创建多个数据集的子集

java - maven中package和groupId有什么区别

android - 如何向 iOS 和 Android 平台提供 C 算法库

java - 如何在处理中的不同时间间隔后触发不同的事件?