农民代表
- 积分
- 6797
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2010-1-28
- 最后登录
- 1970-1-1
|
本帖最后由 cs900601 于 2013-2-23 00:36 编辑
作为好事者,写出尝试结果
4是可以的
以前从来没意识到泛型(看起来很像Template…)还有这些门道在里面…
还有问号的用法…
不过通常写程序的时候直接尝试怎么对就怎么着,然后就不管了,除非需要优化之类的情形下会关心一下
- import java.util.List;
- import java.util.ArrayList;
- public class exercise1 {
- public class Animal {}
- public class Dog extends Animal {}
- void foo() {
- /* 1 (不可) */ // ArrayList<Dog> dogs1 = new ArrayList<Animal>();
- // Correction:
- ArrayList<? extends Animal> extended_animal = new ArrayList<Animal>();
-
- /* 2 (不可) */ // ArrayList<Animal> animals1 = new ArrayList<Dog>();
- // Correction:
- ArrayList<? extends Animal> extended_animals1 = new ArrayList<Dog>();
-
- /* 3 */ List<Animal> list = new ArrayList<Animal>();
-
- /* 4 */ ArrayList<Dog> dogs = new ArrayList<Dog>();
-
- /* 5 (不可)*/ // ArrayList<Animal> animals = dogs;
- // Correction:
- ArrayList<?> animals1 = dogs;
-
- /* 6 */ List<Dog> dogList = dogs;
-
- /* 7 */ ArrayList<Object> objects = new ArrayList<Object>();
-
- /* 8 */ List<Object> objList = objects;
-
- /* 9 (不可) */ // ArrayList<Object> objs = new ArrayList<Dog>();
- // Correction:
- ArrayList<? extends Object> objs = new ArrayList<Dog>();
-
- // List manipulation
- dogs.add(null);
- dogs.add(new Dog());
- // dogs.add(new Integer(1)); // doesn't compile
- // dogs.add(new Animal()); // doesn't compile
- objects.add(null);
- objects.add(new Integer(1));
- objects.add(objects);
- objects.add(dogs);
-
- // Object references...
- Dog dog1 = new Dog(); // OK
- // Dog dog2 = new Animal(); // doesn't compile
- Animal animal1 = new Animal(); // OK
- Animal animal2 = new Dog(); // OK
- Object obj1 = new Animal();
- Object obj2 = new Object();
-
- animal1 = dog1;
- // dog1 = animal1; // doesn't compile
-
- }
- }
复制代码 |
|