错误:java.util.Arrays $ ArrayList无法强制转换为java.util.ArrayList

时间:2014-02-17 11:29:05

标签: java arrays arraylist

我有一个这样的课程:

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

我该如何解决这个问题?

3 个答案:

答案 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(...) functionList<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()) { ... }