从类型对象转换为类

时间:2011-05-31 08:34:25

标签: java arrays casting arraylist

我目前正在尝试填充Stipulations类型的对象数组,这是一个类

public abstract interface

我填充此数组的方法如下,其中popStipAttr是一个简单的switch语句。

    public static Stipulations[] popStipArr(ZASAllocation zasAlloc) 

    {
          //ArrayList<String> s = new ArrayList<String>();
          ArrayList<Stipulations> stipAL  = new ArrayList<Stipulations>();

          for(int i = 0; i < NoStip; i++)
          {
          stipAL.add(popStipAttr(i,zasAlloc));
          }

          Stipulations[] StipArr =  (Stipulations[]) stipAL.toArray();
          return StipArr;
    }

但是我收到有关投射的错误:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lc.Stipulations;

我到底做错了什么我创建了相同类型的arraylist,为什么要将它转换为该类型的数组呢?

2 个答案:

答案 0 :(得分:4)

ArrayList.toArray会返回Object[](如消息中所述,无法转换为Stipulations[])。但是,ArrayList.toArray(T[] a)会返回T[]。因此,改变

Stipulations[] StipArr =  (Stipulations[]) stipAL.toArray();

Stipulations[] StipArr =  (Stipulations[]) stipAL.toArray(new Stipulations[0]);
                                                          ^^^^^^^^^^^^^^^^^^^

哦,对。刚刚意识到可能导致混乱的原因。 [中的前导[Ljava.lang.Object;表示它是一个数组。 [Lc.Stipulations;也是如此。也许这就是为什么你把从类型对象转换为类作为标题:-)现在你知道了: - )

答案 1 :(得分:0)

你在做什么

Stipulations[] StipArr =  (Stipulations[]) stipAL.toArray();

正在调用java.util.List类的方法

Object[] toArray(); 

它会返回一个对象[],它不能被投射到你的规定[]
你想要调用的是java.util.List

上的方法
<T> T[] toArray(T[] a);

将返回您的类型数组。 所以试试

Stipulations[] StipArr =  stipAL.toArray(new Stipulations[stipAL.size()]);

这是一种奇怪的语法,往往会污染代码,由于这个原因以及其他一些我总是尽量使用Lists并且永远不会转换为Arrays和从Arrays转换,除非绝对必要,就像不受我控制的外部API需要它一样

相关问题