本帖最后由 李天甲 于 2012-6-13 07:27 编辑
毕老师第十五天,第12段视频中的练习6时候,讲到泛型的限定问题...
通配符可以限定子类用extends ,也可以限定父类用super 谁能给一个用super的例子啊......
然后我把老师例子中的代码改了一下参见- import java.util.*;
- /*
- ? 通配符。也可以理解为占位符。
- 泛型的限定;
- ? extends E: 可以接收E类型或者E的子类型。上限。
- ? super E: 可以接收E类型或者E的父类型。下限
- */
- class GenericDemo6 {
- public static void main(String[] args) {
- ArrayList<PersonG1> al = new ArrayList<PersonG1>();
- al.add(new PersonG1("abc1"));
- al.add(new PersonG1("abc2"));
- al.add(new PersonG1("abc3"));
- //printColl(al);
- ArrayList<StudentG1> al1 = new ArrayList<StudentG1>();
- al1.add(new StudentG1("abc--1"));
- al1.add(new StudentG1("abc--2"));
- al1.add(new StudentG1("abc--3"));
- printColl(al);
- printColl(al1);
- }
- public static void printColl(Collection<? super StudentG1> al) { //更改后的,限定传入Student1的父类
- Iterator<? super StudentG1> it = al.iterator(); //传入Student1的父类.....
- while (it.hasNext()) {
- System.out.println(it.next().getName()); //然后就报错了,说是找不到方法getName();
- }
- }
- }
- class PersonG1 {
- private String name;
- PersonG1(String name) {
- this.name = name;
- }
- public String getName() {
- return name;
- }
- }
- class StudentG1 extends PersonG1 {
- StudentG1(String name) {
- super(name);
- }
- }
- class CompG1 implements Comparator<PersonG1> {
- public int compare(PersonG1 s1, PersonG1 s2) {
- return s1.getName().compareTo(s2.getName());
- }
- }
复制代码 运行结果出错,说是找不着getName方法???是为何呢?
求教.......
|