我的代码在运行时失败并显示ClassCastException
。我试图调试但是徒劳无功。我已经使用字段声明了一个Class Subject,并且我正在尝试将该类的对象加载到列表中。下面是代码。它失败了:List items = (List)(it.next())
。为泛型添加?
无济于事。我猜对象是强制转换的,尽管List
声明中没有提到泛型。我有一个基本的概念吗?
在下面的方法中,我尝试将数据编码为xml文件。
private void encodeSection(PrintStream output, Indenter indenter,
String name, List list) {
String indent = indenter.makeString();
output.println(indent + "<" + name + "s>");
indenter.in();
String indentNext = indenter.makeString();
if (list == null) {
// the match is any
output.println(indentNext + "<Any" + name + "/>");
} else {
String nextIndent = indenter.makeString();
Iterator it = list.iterator();
indenter.in();
while (it.hasNext()) {
List items = (List)(it.next());//-------------> Error occurs
output.println(indentNext + "<" + name + ">");
Iterator matchIterator = items.iterator();
while (matchIterator.hasNext()) {
TargetMatch tm = (TargetMatch)(matchIterator.next());
tm.encode(output, indenter);
}
output.println(indentNext + "</" + name + ">");
}
indenter.out();
}
indenter.out();
output.println(indent + "</" + name + "s>");
}
}
堆栈追踪:
Exception in thread "main" java.lang.ClassCastException: SubjectID_V cannot be cast to java.util.List
at Target_V.encodeSection(Target_V.java:71)
at Target_V.encode(Target_V.java:41)
at com.sun.xacml.AbstractPolicy.encodeCommonElements(Unknown Source)
at com.sun.xacml.PolicySet.encode(Unknown Source)
at PolicyFactory_V.main(PolicyFactory_V.java:56)
答案 0 :(得分:2)
List items = (List)(it.next())
仅在您迭代的List
仅包含List
类型的元素(即实现List
接口的类的实例)时才有效。
根据您获得的错误,您尝试将SubjectID_V
类型的实例强制转换为List
。您应该查看初始化该列表的代码。您的错误可能就在那里。
使用泛型列表可能有助于避免此异常,因为它会阻止代码首先通过编译。