Java 获取ClassCastException

Java 获取ClassCastException,java,vector,hashtable,classcastexception,Java,Vector,Hashtable,Classcastexception,我将对象类型转换为一个bean类,这反过来会给我一个exception ClassCastException,我不理解这背后的问题 Hashtable listEvent = getEvents(label1.getText(), str); Enumeration events = listEvent.keys(); while (events.hasMoreElements()) { String key = (String) events.nextElement();

我将对象类型转换为一个bean类,这反过来会给我一个exception 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);
Hashtable listEvent=getEvents(label1.getText(),str);
枚举事件=listEvent.keys();
while(events.hasMoreElements()){
字符串键=(字符串)events.nextElement();
if(key.equals(label1.getText())){
向量对象=(向量)listEvent.get(键);
枚举哈希表=listEvent.keys();
while(hashtable.hasMoreElements()){
字符串键=(字符串)hashtable.nextElement();
if(key.equals(label1.getText())){
向量数据=(向量)listEvent.get(键);
对于(int i=0;i

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

首先,如果使用泛型集合而不是原始类型(
Map
而不是
Hashtable
),编译器将捕获这些错误

忘记向量、哈希表和枚举吧。自从Java1.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,这意味着存储在集合中的对象不是您认为的对象。请检查填充集合的代码。(并切换到通用、现代集合)

首先,如果您使用的是通用集合而不是原始类型(
Map
而不是
Hashtable
),编译器将捕获这些错误

忘记向量、哈希表和枚举吧。自从Java1.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,这意味着存储在集合中的对象不是您认为的对象。请检查填充集合的代码。(并切换到通用、现代集合)

显然,
数据
至少包含一些不是类型实例的元素
EventsBean
。是什么让您相信
数据
只包含该类型?很难猜测,
System.out.println(data.elementAt(i).getClass()是什么
print?在强制转换之前放置它。为什么不使用泛型,这样可以删除一系列强制转换?listEvent哈希表中有什么?从异常中可以明显看出,您试图从其他类转换为EventsBean。data仅具有EventsBean类型的值,因为我正在设置这些值显然是
data
至少包含一些不是类型
EventsBean
实例的元素。是什么让您相信
数据
只包含该类型?很难猜测,
System.out.println(data.elementAt(i.getClass())是什么
print?在强制转换之前放置它。为什么不使用泛型,这样可以删除一系列强制转换?listEvent哈希表中有什么?从异常中可以明显看出,您正在尝试从其他类转换为EventsBean。data仅具有EventsBean类型的值,因为我正在设置我的项目完全具有的值Vector和Hashtable,我现在如何解决这个问题,我现在不能修改项目,它会影响大多数ClassEstemporaty修复程序不可用?至少使用Vector和Hashtable。我的项目完全有Vector和Hashtable,我现在如何解决这个问题,我现在不能修改项目,它会影响大多数ClassEstemporaty修复程序不可用?至少使用Vector和Hashtable向量和哈希表。