泛型
- JDK5中引入的新特性,提供了编译时类型安全监测机制。
- 泛型本质就是参数参数化类型,即所操作的数据类型被指定为一个参数
泛型类
class 类名称<泛型标识,泛型标识...>{
private 泛型标识 变量名称;
...
}
//常用的泛型标识: T、E、K、V
- 创建泛型类
package test_03;
public class fanixng_test<E> {
private E key;
public fanixng_test(E key) {
super();
this.key = key;
}
public fanixng_test() {
super();
}
public E getKey() {
return key;
}
public void setKey(E key) {
this.key = key;
}
@Override
public String toString() {
return "innner [key=" + key + "]";
}
}
- 泛型类的运用
fanixng_test<String> fxtst_string = new test_03.fanixng_test<String>("aaa");
fanixng_test<Integer> fstst_int = new test_03.fanixng_test<Integer>(15);
System.out.println( fxtst_string.getClass() == fxtst_int.getClass() ); //true
//没有指定类型时,默认为 Object
// 同一泛型类创建的不同类型的对象的class对象是一样的
泛型类的派生类
-
子类也是泛型类,子类和父类的泛型类型要一致
class ChildGeneric
extends Generic - 子类也是泛型类,子类如果进行泛型扩展其必须含有父类的泛型标识
-
子类不是泛型类,父类要明确泛型的数据类型
class ChildGeneric extends Generic<String\Integer...>
public class fanxing_test2<T> extends fanxing_test<T>{
}
class fx3<T ,K > extends fanxing_test2<T>{
}
class fx4<T,K,V> extends fx3<T,K>{
}
class fx5 extends fx4<Integer , Character, String >{
}
泛型接口
- 创建泛型接口
public interface fxinterface<T>{
public T getKey();
public void setKey(T key);
}
- 实现泛型接口
- 实现类不是泛型
- 实现类是泛型
//实现类是泛型
package test_03;
public class faxing_test3<T> implements fxinterface<T>{
private T key;
@Override
public T getKey() {
// TODO Auto-generated method stub
return this.key;
}
@Override
public void setKey(T key) {
// TODO Auto-generated method stub
this.key = key;
}
@Override
public String toString() {
return "faxing_test3 [key=" + key + "]";
}
public faxing_test3() {
super();
}
public faxing_test3(T key) {
super();
this.key = key;
}
}
泛型方法
- 创建泛型方法
修饰符 <T,E,V...> 返回值类型 方法名(参数列表){
方法体...
}
/*
public T getKey() {
return this.key;
}
public void setKey(T key) {
this.key = key;
}
--- 不是泛型方法
*/
//泛型方法 : 具体的类型,由调用方法时确定
//泛型方法支持静态
public static <E ,V> void setKey2( E key1 ,V key2) {
System.out.println(key1 + "\t" + key2);
}
//泛型方法支持可变参数
public static <E ,V,T> void setKey2( E key1 ,V key2,T...args) {
System.out.println(key1 + "\t" + key2);
}
类型通配符(?)
- ?: 任意类型实参
public static void f1( faxing_test3<?> fx ) {
System.out.println( fx.getKey());
}
通配符上限
类/接口<? extends 实参类型>
- 要求该泛型的类型,只能是实参类型(或实参类型的 子类 类型)
public void f2( faxing_test3<? extends Number> fx) {
System.out.println( fx.getKey() );
}
通配符下限
类/接口 <? super 实参类型>
- 要求该泛型的类型,只能是实参类型(或实参类型的 父类 类型)
public static void f3( faxing_test3<? super Integer> fx) {
System.out.println(fx.getKey());
}

浙公网安备 33010602011771号