Определение строки на основе значения другой строки? - PullRequest
1 голос
/ 03 января 2012

Не все так уверены, как бы я описал этот вопрос, поэтому я сразу перейду к примеру кода.

У меня есть 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);
}

Это не правильно, но вот как я думаю, это сработало бы.

Я устанавливаю Constants.DEVICE в TORO в моемчехол на галактику нексус.Затем я хочу установить для потока String значение Constants.TORO.

Не думаю, что я хорошо это объясняю, но вы сможете понять, что я пытаюсь сделать из примера кода.Я хочу, чтобы

Константы. (ЗНАЧЕНИЕ КАКИЕ КОНСТАНТЫ. УСТРОЙСТВО) были установлены для потока строк.

Другой способ выразить это,

Я хочу получить константы. (// значение android.os.Build.DEVICE.toUpperCase ())

Я прошу прощения за плохо сформулированный вопрос, я не знаю лучшего способа объяснить, чего я пытаюсь достичь.

Я пытаюсь определить поток на основе типа устройства.Я мог бы пойти и сделать

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

Но я планирую добавить гораздо больше опций устройства в будущем и хотел бы сделать это так же просто, как добавить строку в Constants.java вместо того, чтобыдобавить еще одно условие if.

Ответы [ 3 ]

4 голосов
/ 03 января 2012

Я бы предложил использовать перечисление вместо просто строк - тогда вы можете использовать:

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 голос
/ 03 января 2012

Вы можете использовать отражение:

Constants.DEVICE = android.os.Build.DEVICE.toUpperCase();
String thread = (String) Constants.class.getField(Constants.DEVICE).get(null);
0 голосов
/ 03 января 2012

Не уверен, что правильно понял вопрос, но чувствую, что это правильное место для использования Карты.Результат будет примерно таким:

    HashMap<String, String> map;

    map.put(TORO, DEVICE);

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

Извините за возможное недоразумение или ваш вопрос, но я надеюсь, что у вас есть идея.

PS Вы можете найти больше информации о Картах в документации Java: Карта , HashMap .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...