黑马程序员技术交流社区
标题:
晕死,到底哪非法了?
[打印本页]
作者:
qmlovewhr
时间:
2013-7-6 22:09
标题:
晕死,到底哪非法了?
本帖最后由 杨兴庭 于 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)报了个非法表达式的开始,有错吗这个,
到底是哪非法了,没比对出来,求各位指点下。
作者:
草貌路飞
时间:
2013-7-6 22:39
两个错误:1你说的那个错误应该是你的main方法最后没有 } ... 2你的第二个集合左边的Person应该换成Student
作者:
奋斗的小强29
时间:
2013-7-6 22:43
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>();[color=Red]这里类型转换异常,Person应该改为student[/color]
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);
}
}
复制代码
作者:
qmlovewhr
时间:
2013-7-6 22:48
草貌路飞 发表于 2013-7-6 22:39
两个错误:1你说的那个错误应该是你的main方法最后没有 } ... 2你的第二个集合左边的Person应该换成Stude ...
哦,原来如此,居然没检查出来的我呀,
作者:
哪颗最亮的星星
时间:
2013-7-6 22:50
首先你的主函数少了个括号,你是不想定义一个用泛型定义的打印方法,来实现打印集合中,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);
}
}
作者:
谷龙强
时间:
2013-7-6 23:14
ArrayList<Person>a11=new ArrayList<Student>();这句话的声明ArrayList类型引用(等号左边)和创建ArrayList对象里的泛型应该一模一样,这是编译时保护,写成这样子编译器就不知道到底应该往a11中添加Person类型元素还是Student类型元素(虽然他们有子父类关系),应该改为ArrayList<Student>a11=new ArrayList<Student>();。还有就是GenericDemo6类(包含主函数的类)在最后缺少},一般包含主函数的类要声明为public类,这个是书写规范,不强求的。
作者:
方珂
时间:
2013-7-7 21:59
ArrayList<Student> a11 = new ArrayList<Person>(); ArrayList集合中定义泛型的数据类型改成Student。
作者:
杨兴庭
时间:
2013-7-7 22:44
楼主您好,我已将您帖子的状态改成“已解决”,对此如有疑问可以通过QQ632763270和我取得联系
-------------------坚持学习,黑马因你而精彩---------------
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2