【问题标题】:putting data from a LinkedBlockingQueue<> to an array not of type object将 LinkedBlockingQueue<> 中的数据放入非对象类型的数组中
【发布时间】:2013-04-19 19:19:50
【问题描述】:

我正在尝试使用 .toArray() 从 LinkedBlockingQueue 复制到 dataStuff[] 数据数组,但出现异常

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LdataStuff;
    at Main.main(Main.java:30)

使用以下代码

public static BlockingQueue<dataStuff> recurseFragments = new LinkedBlockingQueue<dataStuff>();

    public static void main(String args[]) throws IOException
    {
        dataStuff[] data = (dataStuff[]) recurseFragments.toArray();
    }

我知道它在将 recurseFragments 吐入数组之前将其放入一个 object[] 中,但为什么强制转换不起作用,我该如何解决这个问题?

【问题讨论】:

    标签: java exception casting classcastexception toarray


    【解决方案1】:

    尝试使用other toArray method

    dataStuff[] data = recurseFragments.toArray(new datastuff[0]);
    

    【讨论】:

      【解决方案2】:

      试试这个:

      dataStuff[] data = recurseFragments.toArray(new dataStuff[0])
      

      使用 toArray 的这个签名可以得到正确的返回类型。

      【讨论】:

      • 谢谢这个工作,但我接受了首先发布的答案
      【解决方案3】:

      因为toArray() 返回一个Object[]

      Object[] toArray();
      

      所以,你应该改用toArray(T[] a)

      <T> T[] toArray(T[] a);
      

      这样使用:

      recurseFragments.toArray(new datastuff[0]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-22
        • 2013-07-06
        • 1970-01-01
        • 1970-01-01
        • 2022-11-15
        • 1970-01-01
        • 1970-01-01
        • 2021-03-27
        相关资源
        最近更新 更多