A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qmlovewhr 中级黑马   /  2013-7-6 22:09  /  1575 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-8 16:41 编辑

import java.util.*;
class  GenericDemo6
{
      public static void main(String[] args)
{            
             ArrayList<Person>a1=new ArrayList<Person>();
             a1.add(new Person("abc01"));
             a1.add(new Person("abc02"));
            a1.add(new Person("abc03"));
            printColl(a1);
           ArrayList<Person>a11=new ArrayList<Student>();
           a11.add(new Student("abc---01"));
           a11.add(new Student("abc---02"));
          a11.add(new Student("abc---03"));
         printColl(a11);
  public static void printColl(ArrayList<? extends Person>a1)
  {
          Iterator<? extends Person>it=a1.iterator();
          while(it.hasNext())
        {
          System.out.println(it.next().getName());
        }
  }
}
class Person
{
       private String name;
       Person(String name)
           {
                 this.name=name;
           }
       public String getName()
        {
               return name;
        }
}
class Student extends Person
{
        Student(String name)
         {
              super(name);
          }
}
明明是照着毕老师的例子去做的,可是在public static void printColl(ArrayList<? extends Person>a1)报了个非法表达式的开始,有错吗这个,
到底是哪非法了,没比对出来,求各位指点下。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

7 个回复

倒序浏览
两个错误:1你说的那个错误应该是你的main方法最后没有 } ...   2你的第二个集合左边的Person应该换成Student

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报 1 0
  1. import java.util.*;
  2. class  GenericDemo6
  3. {
  4.        public static void main(String[] args)
  5.                 {            
  6.               ArrayList<Person> a1 = new ArrayList<Person>();
  7.               a1.add(new Person("abc01"));
  8.               a1.add(new Person("abc02"));
  9.              a1.add(new Person("abc03"));
  10.              printColl(a1);
  11.             ArrayList<Person> a11 = new ArrayList<Student>();[color=Red]这里类型转换异常,Person应该改为student[/color]
  12.             a11.add(new Student("abc---01"));
  13.             a11.add(new Student("abc---02"));
  14.            a11.add(new Student("abc---03"));
  15.           printColl(a11);
  16.                 }
  17.    public static void printColl(ArrayList<? extends Person> a1)
  18.    {
  19.            Iterator<? extends Person> it = a1.iterator();
  20.            while(it.hasNext())
  21.          {
  22.            System.out.println(it.next().getName());
  23.          }
  24.    }
  25. }
  26. class Person
  27. {
  28.         private String name;
  29.         Person(String name)
  30.             {
  31.                   this.name=name;
  32.             }
  33.         public String getName()
  34.          {
  35.                 return name;
  36.          }
  37. }
  38. class Student extends Person
  39. {
  40.          Student(String name)
  41.           {
  42.                super(name);
  43.            }
  44. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
赵海洋 + 1 新人鼓励

查看全部评分

回复 使用道具 举报
草貌路飞 发表于 2013-7-6 22:39
两个错误:1你说的那个错误应该是你的main方法最后没有 } ...   2你的第二个集合左边的Person应该换成Stude ...

哦,原来如此,居然没检查出来的我呀,
回复 使用道具 举报
首先你的主函数少了个括号,你是不想定义一个用泛型定义的打印方法,来实现打印集合中,Person和Student对象,代码如下:

import java.util.*;

class GenericDemo6
{
        public static void main(String [] args)
        {
                ArrayList<Person> a1=new ArrayList<Person>();

                a1.add(new Person("abc01"));
                a1.add(new Person("abc02"));
                a1.add(new Person("abc03"));

                printColl(a1);

                ArrayList<Student> a11=new ArrayList<Student>();

                a11.add(new Student("abc---01"));
                a11.add(new Student("abc---02"));
                a11.add(new Student("abc---03"));
                printColl(a11);
        }

        public static void printColl(ArrayList<? extends Person> a1)
        {
                Iterator<? extends Person> it=a1.iterator();
                while(it.hasNext())
                {
                        System.out.println(it.next().getName());
                }
        }
}

class Person
{
        private String name;

        Person(String name)
        {
                this.name=name;
        }

        public String getName()
        {
                return name;
        }
}

class Student extends Person
{
        Student(String name)
        {
                super(name);
        }
}

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
ArrayList<Person>a11=new ArrayList<Student>();这句话的声明ArrayList类型引用(等号左边)和创建ArrayList对象里的泛型应该一模一样,这是编译时保护,写成这样子编译器就不知道到底应该往a11中添加Person类型元素还是Student类型元素(虽然他们有子父类关系),应该改为ArrayList<Student>a11=new ArrayList<Student>();。还有就是GenericDemo6类(包含主函数的类)在最后缺少},一般包含主函数的类要声明为public类,这个是书写规范,不强求的。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
   ArrayList<Student> a11 = new ArrayList<Person>(); ArrayList集合中定义泛型的数据类型改成Student。
回复 使用道具 举报
楼主您好,我已将您帖子的状态改成“已解决”,对此如有疑问可以通过QQ632763270和我取得联系

-------------------坚持学习,黑马因你而精彩---------------
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马