首页 > 代码库 > Java重要技术(23)泛型之问号通配符

Java重要技术(23)泛型之问号通配符

1.1. 问号通配符

在类型参数中使用问号通配符,可以有三种不同的用法:

(1)Generic<?> 表示类型参数为任意对象类型。

(2)Generic<? extends B>表示类型参数为B或者B的派生类。

(3)Generic<? super B>表示类型参数为B或者B的父类。

 

static class  A {}

static class  B extends A{}

static class  C extends B{}

 

static class Generic<T> { }

    static class Holder{

     //Generic<?>可以接受类型参数不同的各种参数化类型。

     public void work( Generic<?> obj ){  }

    

     //? extends B表示类型参数可以是B,或者B的派生类。

     public void workForBC( Generic<? extends B> obj){

     }

    

     //? super B表示类型参数可以是B,或者B的父类。

     public void workForAB( Generic<? super B> obj){

     }

    

    }

 

public static void main(String[] args) {

 

 

Holder holder = new Holder();

 

//work(Generic<A> obj);

holder.work(new Generic<A>());

 

//work(Generic<B> obj);

holder.work(new Generic<B>());

 

//work(Generic<C> obj);

holder.work(new Generic<C>());

 

holder.workForBC(new Generic<B>());

holder.workForBC(new Generic<C>());

//错误,A是B的父类。

//holder.workForBC(new Generic<A>());

 

 

holder.workForAB(new Generic<A>());

holder.workForAB(new Generic<B>());

//错误,C是B的派生类。

//holder.workForAB(new Generic<C>());

 

}

 

}

 

 

Java重要技术(23)泛型之问号通配符