import java.util.*;
public class ShowAll {
   public static void main(String[] args) {
      Queue<Dog> q = new LinkedList<Dog>();      showAll(q);
   }
   public static void showAll(Queue q){
      q.add("love");
      System.out.println(q.poll());
      q.add(new Integer(42)); 
      while(!q.isEmpty()){
         System.out.print(q.remove()+ " ");
      }
   }}
class Dog{}

解决方案 »

  1.   

    LZ这个例子哪是string型的,是DOG类型的
      

  2.   

    对,就算是DOG型的,但为什么能添加入
    new Integer对象而不会抛出
    ClassCastException异常呢??
      

  3.   

    问题是你的方法参数是Queue,不是Queue<Dog>,范型的Queue<Dog>已经转换成了非范型的Queue,自然什么都可以往里面加了,因为这个时候已经不是范型Queue了。
      

  4.   

    public static void showAll(Queue<Dog> q){
      

  5.   

    API文档上有的
    Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。 此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法。 
      

  6.   

    哈哈,public static void showAll(Queue q)出错!    形参是Queue队列,用LinkedList现在,那么默认存储的是Object的对象,什么String\Integer一样可以,不会报错, 改成public static void showAll(Queue<Dog> q)你再试试,分加给我,加油
      

  7.   

    Java的generic是擦除方式(type erasure)的。也就是说runtime的代码是没有generic信息的,所以没有ClassCastException异常呢。
      

  8.   

    改成这样就会报错了。
    public static void showAll(Queue<Dog> q){
          q.add("love");
          System.out.println(q.poll());
          q.add(new Integer(42)); 
          while(!q.isEmpty()){
             System.out.print(q.remove()+ " ");
          }
       }
      

  9.   

    我知道10楼的说的对的。
    我只能这么理解。
    其实这里一定要转换成Dog肯定是会出错的。

    SUN考虑到泛型要与原来的方法兼容。
    因为泛型毕竟出现的晚,所以允许这样放入。
    能这样解释吗?
    请举手。
      

  10.   

    queue已经指明泛型是Dog,那么放别的肯定是报错咯
      

  11.   

    dog在这里相当于Object类型吗?
      

  12.   

    你传进方法里面的Queue对象的参数没有使用泛型,所以默认为Queue<Object>,这就是为什么你可以添加任意类型的原因了。
      

  13.   

    方法的参数,没有限定类型。所以类型就是 Object 了。所以添加 Integer ,也理所应当的。
      

  14.   

    这就是泛型啊,有时候想想sun定的java规范和我们自己写程序也都差不多,考虑的不完整就想办法修修补补,不出大毛病,将就着用吧。
      

  15.   


    可以理解为向后兼容,不然以前写的代码就不能在5.0以上的版本上运行了,而且也是告诉你,泛型可用可不用,只是个语法,为了方便而已,能写出更灵活的代码,就像for(... in ...)、自动拆装箱一样,完全可以用之前的语法。