在Java中将字符串转换为枚举
我已定义此枚举:在Java中将字符串转换为枚举,java,android,enums,Java,Android,Enums,我已定义此枚举: public enum UsageType { START("start"), PAUSE("pause"), RESUME("resume"), STOP("stop"), DESTROY("destroy"); private final String mType; private UsageType(String type) { mType = type; } /**
public enum UsageType {
START("start"),
PAUSE("pause"),
RESUME("resume"),
STOP("stop"),
DESTROY("destroy");
private final String mType;
private UsageType(String type) {
mType = type;
}
/**
* Get the string representation of the UsageType
* @return string representation of the UsageType
*/
public String getAsText() {
return mType;
}
}
在另一个类中,我有一个接受字符串的constractor,我想用该字符串创建一个枚举:
public class AppUsage {
private String mActivityName;
private String mFormattedTime;
private UsageType mUsageType;
public AppUsage(String activityName, String formattedTime, String usageType) {
mActivityName = activityName;
mFormattedTime = formattedTime;
mUsageType = mUsageType.valueOf(usageType); //HERE STRING TO ENUM!
}
//Setters and Getters....
以下是我得到的错误:
java.lang.IllegalArgumentException: start is not a constant in com.embedonix.mobilehealth.serverwork.usage.UsageType
at java.lang.Enum.valueOf(Enum.java:198)
at com.embedonix.mobilehealth.serverwork.usage.UsageType.valueOf(UsageType.java:6)
请尝试
UsageType.valueOf(UsageType.toUpperCase())
。使用该方法时,字符串应与常量名称(START
)匹配,并且大小写很重要
请注意,我使用的是枚举名UsageType
,因为valueOf
是一个静态方法。因此,您应该需要一个实例
另外,请注意,
valueOf
方法在不存在同名常量的情况下抛出illegargumentexception
,运行时异常。请尝试UsageType.valueOf(UsageType.toUpperCase())
。使用该方法时,字符串应与常量名称(START
)匹配,并且大小写很重要
请注意,我使用的是枚举名UsageType
,因为valueOf
是一个静态方法。因此,您应该需要一个实例
另外,请注意,
valueOf
方法在不存在同名常量的情况下抛出IllegalArgumentException
,运行时异常。如果使用常量名称类型(大写),而不是通过构造函数上的参数传递的内部名称
String str = "START"; // as example...could be "PAUSE", or "DESTROY", etc.
UsageType type = UsageType.valueOf(str);
删除此构造函数参数..它没用。简单地说:
public enum UsageType {
START,
PAUSE,
RESUME,
STOP,
DESTROY;
}
对于getAsText(),如果使用常量名称类型(大写),而不是通过构造函数上的参数传递的内部名称,只需使用内置的UsageType.name()
String str = "START"; // as example...could be "PAUSE", or "DESTROY", etc.
UsageType type = UsageType.valueOf(str);
删除此构造函数参数..它没用。简单地说:
public enum UsageType {
START,
PAUSE,
RESUME,
STOP,
DESTROY;
}
对于getAsText()只需使用内置的UsageType.name()这是怎么回事
public AppUsage(String activityName, String formattedTime, String usageType) {
mActivityName = activityName;
mFormattedTime = formattedTime;
for(UsageType type : UsageType.values())
{
if(type.getAsText().equals(usageType))
mUsageType = type;
}
}
这个怎么样
public AppUsage(String activityName, String formattedTime, String usageType) {
mActivityName = activityName;
mFormattedTime = formattedTime;
for(UsageType type : UsageType.values())
{
if(type.getAsText().equals(usageType))
mUsageType = type;
}
}
当我想将字符串转换为枚举时,我总是使用查找映射 将此添加到您的枚举中
private static final Map<String, UsageType> lookup = new HashMap<String, UsageType>();
static {
for (final UsageType s : EnumSet.allOf(UsageType.class)) {
lookup.put(s.getAsText(), s);
}
}
static public UsageType fromString(final String name) {
return lookup.get(name);
}
private static final Map lookup=new HashMap();
静止的{
for(最终UsageType s:EnumSet.allOf(UsageType.class)){
lookup.put(s.getAsText(),s);
}
}
静态公共UsageType fromString(最终字符串名称){
返回lookup.get(name);
}
现在要将字符串转换为enum,您需要做的就是
UsageType.fromString(“someString”)代码>当我想将字符串转换为枚举时,我总是使用查找映射
将此添加到您的枚举中
private static final Map<String, UsageType> lookup = new HashMap<String, UsageType>();
static {
for (final UsageType s : EnumSet.allOf(UsageType.class)) {
lookup.put(s.getAsText(), s);
}
}
static public UsageType fromString(final String name) {
return lookup.get(name);
}
private static final Map lookup=new HashMap();
静止的{
for(最终UsageType s:EnumSet.allOf(UsageType.class)){
lookup.put(s.getAsText(),s);
}
}
静态公共UsageType fromString(最终字符串名称){
返回lookup.get(name);
}
现在要将字符串转换为enum,您需要做的就是UsageType.fromString(“someString”)代码>我观察到的是基于枚举的,我们可以获得值,但不能通过传递值来获得枚举名称。
i、 试试这个,对我来说很好。希望对你有帮助
public enum UsageType {
START("start"),
PAUSE("pause"),
RESUME("resume"),
STOP("stop"),
DESTROY("destroy");
private final String mType;
UsageType(String type) {
mType = type;
}
public String getAsText() {
return mType;
}
}
public class AppUsage {
private String mActivityName;
private String mFormattedTime;
public static UsageType mUsageType;
public AppUsage(String activityName, String formattedTime, String usageType) {
mActivityName = activityName;
mFormattedTime = formattedTime;
mUsageType = UsageType.valueOf(usageType); //HERE STRING TO ENUM!
}
public String getmActivityName() {
return mActivityName;
}
public void setmActivityName(String mActivityName) {
this.mActivityName = mActivityName;
}
public String getmFormattedTime() {
return mFormattedTime;
}
public void setmFormattedTime(String mFormattedTime) {
this.mFormattedTime = mFormattedTime;
}
public UsageType getmUsageType() {
return mUsageType;
}
public void setmUsageType(UsageType mUsageType) {
AppUsage.mUsageType = mUsageType;
}
public static void main(String args[]){
// AppUsage au=new AppUsage("a", "a","START");
UsageType v[]=mUsageType.values();
UsageType u=mUsageType.valueOf("START");
System.out.println(u.getAsText());
}
}
希望它可以解决您的问题我所观察到的是基于枚举的,我们可以得到值,但不能通过传递值来获得枚举名。
i、 试试这个,对我来说很好。希望对你有帮助
public enum UsageType {
START("start"),
PAUSE("pause"),
RESUME("resume"),
STOP("stop"),
DESTROY("destroy");
private final String mType;
UsageType(String type) {
mType = type;
}
public String getAsText() {
return mType;
}
}
public class AppUsage {
private String mActivityName;
private String mFormattedTime;
public static UsageType mUsageType;
public AppUsage(String activityName, String formattedTime, String usageType) {
mActivityName = activityName;
mFormattedTime = formattedTime;
mUsageType = UsageType.valueOf(usageType); //HERE STRING TO ENUM!
}
public String getmActivityName() {
return mActivityName;
}
public void setmActivityName(String mActivityName) {
this.mActivityName = mActivityName;
}
public String getmFormattedTime() {
return mFormattedTime;
}
public void setmFormattedTime(String mFormattedTime) {
this.mFormattedTime = mFormattedTime;
}
public UsageType getmUsageType() {
return mUsageType;
}
public void setmUsageType(UsageType mUsageType) {
AppUsage.mUsageType = mUsageType;
}
public static void main(String args[]){
// AppUsage au=new AppUsage("a", "a","START");
UsageType v[]=mUsageType.values();
UsageType u=mUsageType.valueOf("START");
System.out.println(u.getAsText());
}
}
希望它可以解决您的问题除非您重写toString
,否则不需要显式使用UsageType.name()
。除非您重写toString
,否则不需要显式使用UsageType.name()
。