从Object []到String []的转换给出了ClassCastException

时间:2013-02-18 23:47:03

标签: java swing java-7 jogl

getStrings()方法给了我一个ClassCastException。谁能告诉我应该如何获得模型?谢谢!

public class HW3model extends DefaultListModel<String>
{           
    public HW3model()
    {
        super();
    }

    public void addString(String string)
    {
        addElement(string);
    }

    /**
     * Get the array of strings in the model.
     * @return
     */
    public String[] getStrings()
    {
         return (String[])this.toArray();
    }
}    

3 个答案:

答案 0 :(得分:2)

toArray返回的值是Object数组。

也就是说,它们被声明为Object[],而不是String[],然后通过Object[]返回。

这意味着您永远不会将它置于String数组中,它只是无效。

您必须自己复制值...例如

public String[] getStrings()
    Object[] oValues= toArray();
    String[] sValues = new String[oValues.length];
    for (int index = 0; index < oValues.length; index++) {
        sValues[index] = oValues[index].toString();
    }
    return sValues;
}

答案 1 :(得分:1)

您不能将一个数组转换为另一个数组的类型,因此您必须确保创建自己的数组:

public String[] getStrings() {
    String[] result = new String[getSize()];
    copyInto(result);
    return result;
}

答案 2 :(得分:1)

试试这个,看看是否可行

String[] stringArrayX = Arrays.copyOf(objectArrayX, objectArrayX.length, String[].class);