package c08;import java.util.*; class Hamster { 
   private int hamsterNumber; 
   Hamster(int i) { 
     hamsterNumber = i; 
   } 
  /*public String toString() { 
       return "This is Hamster #" + hamsterNumber; 
   } */
} class Printer { 
   static void printAll(Enumeration e) { 
       while(e.hasMoreElements()) 
          System.out.println( 
            (String) e.nextElement());    } //对e.nextElement()进行一次String造型,为什么会出现异常,在写代码的时候,没有提示出错啊~~
                 } public class HamsterMaze { 
   public static void main(String[] args) { 
       Vector v = new Vector(); 
       for(int i = 0; i < 3; i++) 
          v.addElement(new Hamster(i)); 
       Printer.printAll(v.elements()); 
   } 

解决方案 »

  1.   

    v.addElement(new Hamster(i));  这个类型不是String,类型转换异常。这个是运行时异常。只有运行的时候才能发现。
      

  2.   

    但是thinking in java中提到,是可以进行转化的啊
      

  3.   


    import java.util.*;class Hamster {
        private int hamsterNumber;    Hamster(int i) {
    hamsterNumber = i;
        }    public String toString() {
    return "This is Hamster #" + hamsterNumber;
        }
    }class Printer {
        static void printAll(Enumeration e) {
    while (e.hasMoreElements()) {
        // System.out.println( (String)e.nextElement());//error: because it is not String
        // System.out.println( (Hamster)e.nextElement());//correct:because it is Hamster
        System.out.println(e.nextElement());// correct:because it is Hamster
    }
        }// 对e.nextElement()进行一次String造型,为什么会出现异常,在写代码的时候,没有提示出错啊~~
    }// 泛型是相当相当麻烦的(擦除机制),哎呀,我又碰见啦
    public class HamsterMaze {
        public static void main(String[] args) {
    //Vector v = new Vector();//现在已经不提倡使用原生类型了,能够使用,是因为要兼用老程序
     Vector<Hamster> v = new Vector<Hamster>();// for (int i = 0; i < 3; i++)
        v.addElement(new Hamster(i));
    for (int i = 0; i < 3; i++)
        System.out.println(v.get(i));
    Printer.printAll(v.elements());
        }
    }/*output:This is Hamster #0
    This is Hamster #1
    This is Hamster #2
    This is Hamster #0
    This is Hamster #1
    This is Hamster #2
     */
      

  4.   

    你使用Vector的时候没有使用泛型的声明,因此编译时候无法对强制类型转换检查,而运行的时候发现e.nextElement()返回的实际上是Hasmster类型变量,强制转换为String,因为类型不匹配因此报异常
    如果是想有编译时候的异常,可以这样写
    package csdn.p6;import java.util.*;class Hamster {
        private int hamsterNumber;
        Hamster(int i) {
            hamsterNumber = i;
        }
        /*public String toString() {
       return "This is Hamster #" + hamsterNumber;
       } */
    }class Printer {
        static void printAll(Enumeration<Hamster> e) {
            while(e.hasMoreElements()){
    //            System.out.println(
    //                    (String) e.nextElement());编译时就会声明错误
                Hamster h=e.nextElement();
                System.out.println(h);
            }    } //对e.nextElement()进行一次String造型,为什么会出现异常,在写代码的时候,没有提示出错啊~~
    }public class HamsterMaze {
        public static void main(String[] args) {
            Vector<Hamster> v = new Vector<Hamster>();
            for(int i = 0; i < 3; i++)
                v.addElement(new Hamster(i));
            Printer.printAll(v.elements());
        }
    }
      

  5.   

    很明确告诉你,仅仅就你写的代码来看,是不可能进行转化的,thinking in java肯定不是这么一个程序