- package com.cn.fanxing;
-
- import java.util.ArrayList;
- import java.util.List;
- class Toy
- {
-
- }
-
- class SubToy extends Toy
- {
-
- }
-
- class SubToy2 extends Toy
- {
-
- }
- public class Generics
- {
-
- public static void main(String[] args) throws Exception
- {
- Toy toy = new Toy();
- SubToy subToy = new SubToy();
- SubToy subToy2 = new SubToy();
-
- List<? extends Toy> list = new ArrayList<Toy>();// 表示所持有对象是Toy子类
- List<? extends Toy> list1 = new ArrayList<SubToy>();// 表示所持有对象是Toy的子类
-
- // list.add(toy); 错误的 因为list所持有的对象类型上限为Toy,但是他不知道具体持有的对象类型,
- // list.add(subToy); 错误的,理由同上
- // list.add(subToy2); 错误的,理由同上
-
- // list1.add(toy); 错误的 因为list1所持有的对象类型上限为Toy,但是他不知道具体持有的对象类型,
- // list1.add(subToy); 错误的,理由同上
- // list1.add(subToy2); 错误的,理由同上
-
- List<? super Toy> list2 = new ArrayList<Toy>();// 所持有对象为Toy的超类,下限为Toy,所以可以add()
- // Toy及Toy的子类
- list2.add(toy);
- list2.add(subToy);
- list2.add(subToy2);
-
- // List<? super Toy> list3 = new ArrayList<SubToy>();
- // 错误的,所持有对象为Toy的超类,下限为Toy,
- // 所以不可以超过下限Toy,将ArrayList泛型指定为SubToy
-
- List<? super SubToy> list4 = new ArrayList<Toy>();// 所持有对象为SubToy的超类,下限为SubToy
- // ,
- // 可以将ArrayList泛型指定为Toy
- // list4.add(toy);
- // 错误的,因为虽然持有对象为SubToy的超类,但是容器不知道具体的类型是超类还是子类,所以不能放入超类,但是子类的话就可以的
- list4.add(subToy);
- list4.add(subToy2);
-
- List<? super SubToy> list5 = new ArrayList<SubToy>();// 所持有对象为SubToy的超类,下限为SubToy
- // ,
- // 可以将ArrayList泛型指定为SubToy
- // list5.add(toy); 错误的,理由同list4
- list5.add(subToy);
- list5.add(subToy2);
-
- // List<? super SubToy> list6 = new ArrayList<SubToy2>();
- // 错误的,所持有对象为SubToy的超类,下限为SubToy ,
- // 所以持有的对象可能为Toy,也可能为SubToy ,也就不能将具体的实现的泛型指定为SubToy2
-
- }
-
- }
复制代码 |