- 泛型(规范)
- 使用泛型的时候,必须使用包装类(Integar、String等)
- 自定义泛型类、泛型接口、泛型方法:
- 自定义泛型类/泛型接口
- 在继承指明了泛型的父类,子类实例化时不需要指明泛型
- 继承指明了泛型的父类,也可以保留父类的泛型,用于调用父类泛型的方法,此时子类创建时需要指定泛型
- 泛型不同的引用不能相互赋值 ArrayList<String> 与.ArrayList<Integer>不能相互赋值
- 如果泛型不指定,泛型对应的类型按照Object处理,但不等价与Object
- 如果泛型指定的是基本数据类型,则需要用包装类替换(int 需要用Integer替换)
- 静态方法不能使用类的泛型(泛型的指定是类实例化的时候,而静态方法是随着类的加载而创建)
- 自定义泛型方法
- 泛型方法不是必须在自定义 泛型类中
- 泛型在继承方面的体现:
- 1.如果类A是类B的父类,G<A>和 G<B>是并列关系,不能赋值(会导致数据的紊乱)
- 2.如果类A是类B的父类,A<G> 是B<G>的父类,可以赋值(List<Stirng> ArraryList<String>)
- 3.如果类A是类B的父类,G<A>和 G<B>是并列关系,不能赋值(会导致数据的紊乱),二者共同的父类是G<?>
- 通配符的使用:
- 通过通配符“?”表示几个子类的父类
- 添加(写入):add,使用通配符时,不能向内添加数据,除了添加null之外(因为不管什么类型,都可以添加null)
- 获取(读取):get,允许读取数据,读取的数据类型为Object
- 有限制条件的通配符:
- <? extends A> 可以作为A和A的子类 的父类
- <? super A> 可以作为A和A的父类 的父类
|