【问题标题】:Casting from Object[] to String[] gives a ClassCastException从 Object[] 转换为 String[] 会产生 ClassCastException
【发布时间】:2013-02-18 23:47:03
【问题描述】:

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();
    }
}    

【问题讨论】:

  • 你的toArray方法在哪里?
  • 这是我调用的 DefaultListModel 的一种方法。我不应该使用“这个”
  • 他用的是超类的方法。但它不返回字符串数组,而是返回对象数组。所以这是你的问题。对待它是什么,一个对象数组。
  • 有什么办法可以将其转换为字符串数组?

标签: java swing java-7 jogl


【解决方案1】:

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;
}

【讨论】:

  • 你不得不佩服那些无法就为什么认为有必要投反对票的投票者的勇气。它无助于帮助发帖者或未来的发帖者改进这个或未来的问题。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    试试这个,看看是否可行

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      • 2013-04-24
      • 2013-05-24
      相关资源
      最近更新 更多