泛型
一般使用下面的标记
E Element 表示 容器中的元素
T Type 表示普通的jAVA类
K Key 表示键 例如:Map中的键Key
V Value 表示值
N Number表示数值类型
? 表示不确定的JAVA类型 表示通配符
泛型之方法
泛型方法:泛型类中所定义的泛型,在方法中也可以使用
泛型方法是指将方法中的参数类型定义为泛型,以便在调用时接收不同类型的参数
非静态泛型
public<泛型表示符> void getName(泛型表示符 name){
}
public<泛型表示符> 泛型表示符 getName(泛型表示符 name){
}
静态方法:静态方法无法访问类上定义的泛型;如果静态方法操作的引用数据类型不确定的时候
必须要将泛型定义在方法上
语法:
public static <泛型表示符> void getName(泛型表示符 name){
}
public static<泛型表示符> 泛型表示符 getName(泛型表示符 name){
}
泛型方法于可变参数:
语法
public <T> void method(T...args){ //泛型之可变参数
for (T t: args) {
System.out.println(t);
}
}
泛型 通配符和上下限定
<?> 表示不确定的JAVA类型 表示通配符
泛型不会考虑继承的关系
上限限定表示通配符的类型是当前类以及当前类的子类或者当前接口以及当前接口的子接口
语法:
上限就是只能是number 的子类能用
public void show(Generic<? extends/*加继承就会有上限*/ Number> abc){//测试通配符?
System.out.println(abc.getFlag());
}
下限限定表示通配符的类型是当前类以及当前类的父类或者当前接口以及当前接口的父接口
语法:
public void show(Generic<? super Integer> abc){//测试通配符?
System.out.println(abc.getFlag());
}
不适用于泛型类
泛型总结
主要用于编译阶段,编译后生成的字节码class文件不包含泛型中的类型信息。
类型参数在编译后会替换成objet,运行时虚拟机并不知道泛型
错误的情况:
1基本类型不能用于泛型
Textt; 错误的 用对应的包装类 Textt;
2.不能通过类型参数创建对象
T elm = new T(); 不支持这种写法