在运行时设置ENUM值

时间:2013-11-21 09:49:36

标签: java arraylist enums

我将ENUM定义为;

public enum YesNoEnum {
    Y,
    N
}

我使用此作为我投票的一个值。

所以我在一个循环中使用它(从查询响应循环遍历对象数组)

person.setVoted(responseArray[1] != null ? YesNoEnum.valueOf((String)responseArray[1]) : null);

我有设置器

public void setVoted(YesNoEnum voted) {
    this.voted = voted;
}

如果responseArray[1]的值为Y/N

,我现在收到异常

如果我debug/watch responseArray[1],则会将类型显示为YesNoEnum,并将值显示为"Y" 它说

  

无法将YesNoEnum的实例强制转换为String

的实例

3 个答案:

答案 0 :(得分:1)

  

如果我调试/观看responseArray [1],它会将类型显示为 YesNoEnum ,并将值显示为“Y”它表示

如果我理解正确,responseArray是枚举YesNoEnum的数组。

因此,在将枚举实例转换为String时会出错:

(String)responseArray[1]

你可以写:

person.setVoted(responseArray[1]);

作为旁注

处理null我会将枚举更改为:

public enum YesNoEnum {
    Y,
    N,
    UNKNOWN
}

并写:

person.setVoted(responseArray[1] != null ? responseArray[1] : YesNoEnum.UNKNOWN);

答案 1 :(得分:0)

使用responseArray[1].toString()代替(String)responseArray[1]

答案 2 :(得分:0)

YesNoEnum不是字符串,它是枚举,您无法从枚举转换为字符串。您可以通过调用.toString()将枚举更改为String,或者如果您知道数组中的所有对象都是YesNoEnum类型,那么您可以跳过全部转换并执行此操作:

person.setVoted(responseArray[1] != null ? responseArray[1] : null);

但是,如果responseArray的内容有多种类型(一些YesNoEnum,一些String,一些Object ......),则需要确定将每种类型转换为{{1}的方法对象,在另一种方法中做得更好。另外,我强烈建议避免在数组中使用混合对象类型。它会产生各种各样的问题。让你的阵列保持所有相同的类型。如果您需要使用混合类型,那么采取不同的方法。