根据另一个String的值确定String?

时间:2012-01-03 11:01:35

标签: java android string

我并不确定如何描述这个问题,所以我会直接进入示例代码。

我有一个Constants.java

   package com.t3hh4xx0r.poc;


public class Constants {

    //RootzWiki Device Forum Constants
    public static final String RWFORUM = "http://rootzwiki.com/forum/";
    public static final String TORO = "362-cdma-galaxy-nexus-developer-forum";

    public static String DEVICE;
}

在尝试确定设备类型时,我使用此方法。

public void getDevice() {
    Constants.DEVICE = android.os.Build.DEVICE.toUpperCase();
    String thread = Constants.(Constants.DEVICE);
}

但这不正确,但这就是我认为它会起作用的方式。

我在Galaxy Nexus的情况下将Constants.DEVICE设置为TORO。我想将线程String设置为Constants.TORO。

我不认为我在解释这个问题,但是你可以从示例代码中了解我正在尝试做什么。我想要

为String线程设置的常量。(为CONSTANTS.DEVICE提供的值)。

另一种表达方式,

我想得到常量。(// android.os.Build.DEVICE.toUpperCase()的值)

我为措辞不好的问题道歉,我不知道有什么更好的方法可以解释我想要实现的目标。

我试图根据设备类型确定线程。我可以进去做一个

if (Constants.DEVICE.equals("TORO"){
    String thread = Constants.TORO;
}

但是我计划将来添加更多的设备选项,并希望像在Constants.java中添加字符串一样简单,而不必添加另一个if子句。

3 个答案:

答案 0 :(得分:4)

我建议使用枚举而不仅仅是字符串 - 然后你可以使用:

String name = android.os.Build.DEVICE.toUpperCase();
// DeviceType is the new enum
DeviceType type = Enum.valueOf(DeviceType.class, name);

您可以将字符串的值放在枚举的字段中,并通过属性公开它:

public enum DeviceType {
    RWFORUM("http://rootzwiki.com/forum/"),
    TORO("362-cdma-galaxy-nexus-developer-forum");

    private final String forumUrl;

    private DeviceType(String forumUrl) {
        this.forumUrl = forumUrl;
    }

    public String getForumUrl() {
        return forumUrl;
    }
}

(我猜测字符串值的含义 - 不是很好的猜测,但希望它给出正确的想法,这样你就可以让你的实际代码更有意义。)

编辑:或者使用地图:

Map<String, String> deviceToForumMap = new HashMap<String, String>();
deviceToForumMap.put("RWFORUM", "http://rootzwiki.com/forum/");
deviceToForumMap.put("TORO", "362-cdma-galaxy-nexus-developer-forum");

...

String forum = deviceToForumMap.get(android.os.Build.DEVICE.toUpperCase());

答案 1 :(得分:1)

您可以使用反射:

Constants.DEVICE = android.os.Build.DEVICE.toUpperCase();
String thread = (String) Constants.class.getField(Constants.DEVICE).get(null);

答案 2 :(得分:0)

我不确定我是否正确理解了这个问题,但我觉得这是一个使用地图的正确位置。结果将是这样的:

    HashMap<String, String> map;

    map.put(TORO, DEVICE);

    Constants.DEVICE = android.os.Build.DEVICE.toUpperCase();
    String thread = map.get(Constants.DEVICE);

很抱歉可能存在误解或您的问题,但我希望您有这个想法。

P.S。您可以在Java文档中找到有关地图的更多信息:MapHashMap