【问题标题】:Error: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList错误:java.util.Arrays$ArrayList 无法转换为 java.util.ArrayList
【发布时间】:2014-03-16 16:15:09
【问题描述】:

我有这样的课:

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

我该如何解决这个问题?

【问题讨论】:

    标签: java arrays arraylist


    【解决方案1】:

    这是因为您在演员表中使用了具体类型。试试这个:

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

    因为您有保证它使用该接口。作为风格指南,总是更喜欢使用接口而不是具体类型。

    【讨论】:

    • 我没有做完全相同的事情,但你的观点是正确的,只是继承的东西。
    【解决方案2】:

    您不需要强制转换,只需遍历request.getAttribute("listQuestions")Arrays.asList 返回的List 实现以及所有Collections 实例,都是'Iterable' 的实现,您可以在for(... in ...) 中使用then。

    更多:http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html

    【讨论】:

      【解决方案3】:

      return type of the Arrays.asList(...) functionList&lt;T&gt;。因此,您不得对用于实现 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()) { ... }
      

      【讨论】:

        猜你喜欢
        • 2023-04-07
        • 2023-03-26
        • 1970-01-01
        • 2015-03-13
        • 2017-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-16
        相关资源
        最近更新 更多