2014-02-17 61 views
2

我有這樣一個類:

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 cannot be cast to java.util.ArrayList

我該如何解決這個問題?

回答

3

發生這種情況是因爲您在演員中使用了具體類型。試試這個:

for(Question q : (List<Question>) request.getAttribute("listQuestions")) 

既然你有保證,它使用的接口。作爲一種風格指南,總是傾向於使用具體類型的接口。

+0

我不會做同樣的事情,但你的觀點是正確的,只是一種遺產。 –

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()) { ... } 
相關問題