我想将enum用于我未来的编码,因为它似乎比使用字符串更合法。虽然,我遇到了一些问题。
我只是想将一个字符串存储在一个常量中,每当我访问它时它都会给我输出字符串,所以我尝试了以下内容:
public enum Fruit {
AP("Apple"),
BA("Banana");
private String str;
Fruit(String str) {
this.str = str;
}
public String toString() {
return str;
}
}
问题是每当我访问它时,它都会返回null。因此,我想我需要在访问它之前为每个枚举定义Fruit()的值:
String fruit = Fruit.AP.toString(); //NULL
所以我采取了不同的方法:
public enum Fruit {
AP, BA;
public String toString(){
switch (this) {
case AP: return "Apple";
case BA: return "Banana";
}
return null;
}
}
但很快我注意到引用字符串资源会更有意义,但我无法在交换机中返回R.string.apple
。那么我该如何解决这个问题呢?第一个返回null,第二个不返回字符串资源。
Fruit.values();
?感谢您的帮助!
答案 0 :(得分:0)
在枚举中创建一个方法以返回str值
public enum Fruit {
AP("Apple"),
BA("Banana");
private String str;
Fruit(String str) {
this.str = str;
}
public String getStr() {
return str;
}
}
然后您可以使用Fruit.AP.getStr();
访问该内容并返回您之后的内容;)
是的,您可以使用Fruit.values();
答案 1 :(得分:0)
问题是每当我访问它时,它都会返回null。因此,我想我需要在访问它之前为每个枚举定义Fruit()的值:
String fruit = Fruit.AP.toString(); //NULL
我认为没有理由这样做。事实上,如果我将enum
定义复制/粘贴到我的IDE并尝试访问Fruit.AP.toString()
,我就会成功地看到" Apple"在我的输出中。
我唯一关注的是你的enum
定义包括:
private String str;
我认为您应该将其声明为private final String str
;您不希望str
的值在应用运行时的过程中发生变化。 可能您的代码中的某些内容正在执行奇怪的操作,例如Fruit.AP.str = null
,这可能会导致您的问题。
但很快我注意到引用字符串资源会更有意义,但我无法在交换机中返回R.string.apple。那么我该如何解决这个问题?
你有两个选择。两者都涉及稍微改变你的枚举定义(类似这样):
public enum Fruit {
AP(R.string.apple),
BA(R.string.banana);
private final int strId;
Fruit(int strId strId) {
this.strId = strId;
}
}
从这里,您可以只检索字符串资源ID,然后像普通字符串资源ID一样使用它:
myTextView.setText(Fruit.AP.getStrId());
// or
String apple = getString(Fruit.AP.getStrId());
或者您可以在enum上创建一个接受Context
实例的方法并直接返回字符串:
public String getString(Context context) {
return context.getString(strId);
}
然后像这样使用它:
String apple = Fruit.AP.getString(MainActivity.this);