我使用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如何获取这些语言。也许这有助于我们找到答案。
答案 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")