我有一个这样的课程:
public class Questionnaire {
private String questionnaireLibelle;
private List<Question> questions;
// ...
}
我已经初始化了一份新的调查问卷:
Questionnaire q = new Questionnaire(
"Architecture des ordinateurs",
Arrays.asList(
new Question( "1. La partie du processeur spécialisée pour les calculs est :"),
new Question("2. Dans un ordinateur, les données sont présentées par un signal électrique de la forme :"),
new Question("3. Les différents éléments d’un ordinateur (mémoire, processeur, périphériques…) sont reliés entre eux par des:")
)
);
如您所见,我使用了Arrays.asList()
而不是声明新的ArrayList
。
在另一个课程中我使用了这段代码:
for(Question q : (ArrayList<Question>) request.getAttribute("listQuestions"))
但是我在这一行得到了这个错误:
java.lang.ClassCastException:java.util.Arrays $ ArrayList无法强制转换为java.util.ArrayList
我该如何解决这个问题?
答案 0 :(得分:3)
这是因为您在演员表中使用了具体类型。试试吧:
for(Question q : (List<Question>) request.getAttribute("listQuestions"))
因为您可以保证它使用该界面。作为样式指南,始终更喜欢将接口用于具体类型。
答案 1 :(得分:1)
你不需要强制转换,只需迭代request.getAttribute("listQuestions")
,List
返回的Arrays.asList
实现,以及所有Collections
个实例,都是'Iterable'的实现,而你可以在for(... in ...)
中使用。
更多:http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html
答案 2 :(得分:1)
return type of the Arrays.asList(...)
function是List<T>
。因此,您不得对用于实现List
interface的类的具体类型做出任何假设。
Arrays.asList可以在内部使用任何类型的列表。当然,人们可能会期望在这里使用ArrayList,但是每个Java版本都可以更改它。
我想你想要的更接近于此(我简化了一下):
public class Questionnaire {
private String questionnaireLibelle;
private List<Question> questions;
public List<Question> getQuestions() { return questions; }
.....
}
然后:
for(Question q : request.getQuestions()) { ... }