泛型
为什么使用泛型:
1保证数据一致性
2避免强转出错
3避免数据类型不一致的问题
4操作统一化
泛型格式:<无意义的字符> 一般放 <T> <E> <?>
泛型方法:
如果一个方法使用了泛型,会让该方法具有普适性。
语法格式4中:
权限修饰符 [static] <无意义的字符占位> 返回值类型 方法名字(T t) {return t;}
有返回值,有参数.
权限修饰符 [static] <无意义的字符占位> void 方法名字(T t){}
有参无返回值
权限修饰符 [static] <无意义的字符占位> T 方法名字(){}
无返回值有参数(这种没有意义)
权限修饰符 [static] <无意义的字符占位> void 方法名字(){}
无参无返回值
泛型类
语法格式:
class 类名 <无意义的占位符> {
}
1.在类名的后面加<T> 声明了一个类带有泛型的类
2.在实例化对象的时候,确定了泛型的数据类型
3.方法中如果带有泛型的时候,一定使用的是类带有泛型的类型
4.静态方法和类声明的泛型没有任何关系(
//一个类下面可以有静态方法。 //对象的创建的时候才确定泛型的类型。静态方法早于对象的创建 的 //所以静态方法中使用泛型的时候,和类定义的泛型没有关系 public static <E> void testStatic (E e) { System.out.println(e); }
)
5.泛型类的成员泛型方法两种写法的区别(
public <T> void printArgs(T t) {}//这种写法类的泛型和成员方法的泛型 没有任何关系
public void printArgs(T t) {}//这种写法泛型类是什么类型方法T就是什么类型
)
6.泛型类中也可以写普通的成员方法
自定义泛型在接口如何使用
语法格式:
interface 接口名字<T> {
}
实现类的各式:
class TestA<T> implements A<T>{}
剩下的该重写重写,和普通接口的用法一致
自定义泛型在抽象类中如何使用
语法格式:
public abstract 类名<T> {
}
继承格式:class 子类名<T> extends 父类名<T>{}
剩下的和普通的继承一样