从String转换为String的字段

时间:2013-04-29 18:03:23

标签: java google-api google-translate

我使用this great Java library使用Google翻译非官方API将文字转换为语音。

使用此代码,它可以“阅读”英文文本(请参阅Language.ENLGISH):

Audio audio = Audio.getInstance();
InputStream sound  = audio.getAudio("I am a bus", Language.ENGLISH);
audio.play(sound);

我有一个包含所有语言的列表(组合框)。

如何将"ENGLISH"的字符串转换为字段Language.ENGLISH

我不想在代码(if)中使用很多if (mySelectedLanguage.equals("ENGLISH") // ...Language.English

我已经尝试过:

  • Language["ENGLISH"]受到Javascript的启发,但不起作用
  • Language.class.getField("ENGLISH").toString()(toString因为它们的类型是字符串:public static final String ENGLISH

哪种方法真的有效?

编辑:我已经问过here如何获取这些语言。也许这有助于我们找到答案。

2 个答案:

答案 0 :(得分:1)

创建自己的枚举来存储这些值。无论您遇到什么困难,这都是一种很好的做法 - 通过为此第三方课程创建façade,您可以分离代码的一部分。

如果您如下所示实施toString(),则可以将这些枚举值直接存储在组合框中。

public enum Languages {

  ENGLISH(Language.ENGLISH, "English"),
  // etc..
  ;

  private final String languageName;
  private final String displayName;

  private Languages(String languageName, String displayName) {
    this.languageName = languageName;
    this.displayName = displayName;
  }

  public String getLanguageString() {
    return languageName;
  }


  public String getDisplayString() {
    return displayName;
  }

  public static Languages fromString(String languageString) {
    for (Language l : values()) {
      if (l.getLanguageString().equals(languageString)) {
        return l;
      }
    }
    return null;
  }

  // optional
  @Override
  public String toString() {
    return displayName;
  }    
}

也许选择比Languages更好的名字 - 我感觉不是很有灵感。

答案 1 :(得分:1)

如果您想获得公共静态字段的值

然后代替

Language.class.getField("ENGLISH").toString();

使用

(String)Language.class.getField("ENGLISH").get(null);

null表示你不想从某个对象获取字段,而是从整个类中获取字段(在静态变量的情况下是期望的行为)


但如果有可能,我建议您重写您的语言课程,以便枚举和使用Language.valueOf("ENGLISH")