我将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
的实例
答案 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}的方法对象,在另一种方法中做得更好。另外,我强烈建议避免在数组中使用混合对象类型。它会产生各种各样的问题。让你的阵列保持所有相同的类型。如果您需要使用混合类型,那么采取不同的方法。