【问题标题】:Getting ClassCastException获取 ClassCastException
【发布时间】:2012-04-01 07:17:47
【问题描述】:

我将对象类型转换为 bean 类,这反过来又给了我一个异常 ClassCastException,我没有得到这背后的问题。

 Hashtable listEvent = getEvents(label1.getText(), str);

  Enumeration events = listEvent.keys();
   while (events.hasMoreElements()) {
    String key = (String) events.nextElement();

    if (key.equals(label1.getText())) {

       Vector object = (Vector) listEvent.get(key);

       Enumeration hashtable = listEvent.keys();
        while (hashtable.hasMoreElements()) {
          String keys = (String) hashtable.nextElement();
           if (keys.equals(label1.getText())) {

  Vector data = (Vector) listEvent.get(keys);
       for (int i = 0; i < data.size(); i++) {
      EventsBean bean1 = (EventsBean) data.elementAt(i);

在运行应用程序以将类型转换为 EventsBean 时出现错误。

【问题讨论】:

  • 显然data 至少包含一些 元素不是EventsBean 类型的实例。是什么让您相信 data 只会包含该类型?
  • 很难猜,System.out.println(data.elementAt(i).getClass()) 打印的是什么?就在施法之前放置它。
  • 你为什么不使用泛型,它应该删除一堆这些演员?
  • listEvent Hashtable 中有什么?从异常中可以明显看出您正在尝试从其他类转换为 EventsBean。
  • 数据只有EventsBean类型的值,因为我正在设置这些

标签: java vector hashtable classcastexception


【解决方案1】:

首先,如果您使用泛型集合而不是原始类型(Map&lt;String, List&lt;EventsBean&gt;&gt; 而不是 Hashtable),编译器会捕获这些错误。

忘记向量、哈希表和枚举。自 Java 1.2 起不应再使用它们。

最后,为什么要迭代哈希表键,而不是直接查找值?

代替

Enumeration events = listEvent.keys();
while (events.hasMoreElements()) {
    String key = (String) events.nextElement();
    if (key.equals(label1.getText())) {
       Vector object = (Vector) listEvent.get(key);

随便用

Vector object = (Vector) listEvent.get(label1.getText());

现在回答你的问题:如果你得到一个 ClassCastException,这意味着存储在集合中的对象不是你认为的那样。检查填充集合的代码。 (并切换到通用的现代系列)

【讨论】:

  • 我的项目完全有Vector和Hashtable,我现在怎么解决这个问题,我现在不能修改项目,它会影响大多数类
  • 临时修复不可用?
  • 至少使用 Vector 和 Hashtable>。
猜你喜欢
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 2016-07-26
  • 1970-01-01
相关资源
最近更新 更多