我的笔记:
二、 泛型的产生:
a) 第一个原因,也是主要原因:用泛型约束参数类型。
b) 泛型出现之前:可以使用重写方法的方式来约束参数;
——原则:重写所有需要用到的方法
c) 泛型类的开发:
1. 我们可以用一个符号来标记这个类中不能确定类型的部分;
d) *****泛型的用途:
1. *****使用已有泛型类进行泛型编程:凡是类名后边跟类个尖角号的类;
1. 原则:看不懂就把所有尖角号省略掉。
2. 如何使用:尖角号里边填写类类型或者接口类型的实际参数;——把类型作为参数;
3. 实例化对象时:泛型类型的参数前后要一致。如果不使用参数,会报类型警告,但基本不会报错。
4. 当使用类泛型类型约束的对象的时候,这个对象能使用的方法都会自动转换成相应的泛型类型的方法。
2. ***开发泛型类:主要考虑泛型属性和方法;
i. 泛型属性:用特殊字符(声明泛型类时候尖角号里的那个字符)占位。
ii. 泛型方法;
1. 泛型参数;
2. 泛型返回类型的方法
3. 练习:定义一个泛型类Apple,有两个泛型方法1、重量;2、品种。这两个方法,都是返回信息,
实例化两个对象,一个是:Double型的苹果对象、Integer型的苹果对象,根据相应的类型,输出苹果类的重量信息。
e) 泛型通配符:英文格式下的:?
i.
f) 泛型的继承,泛型的上下限,泛型接口,泛型抽象类
三、 在一种情况下,程序需要为类型参数设定多个上限(至少一个父类上限,可以有多个接口上限),表明该类型形参必须是其父类的子类(是父类本身也行),并且实现多个上限接口。
如: public class Apple <T extends Number & java.io.Serializable>
{
………………
}
使用多个上限的时候,所有的接口上限必须位于类上限之后 , 也就是说, 如果要定义上限的话,类上限必须是第一位。
四、 泛型方法: 在声明方法时定义一个或多个类型形参 如:
1. 修饰符 <T , S > 返回值类型 方法名 (形参列表){
方法体…………
}
2. Static <T> void timo (T[] a, collection< T > c){
for(T o : a){
c.add(o);
}
}
|