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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)泛型之问号通配符的主要内容,如果未能解决你的问题,请参考以下文章

Java泛型之通配符

java泛型之泛型通配符具体是啥作用?

Java重要技术(19)泛型之泛型的使用方法

Java重要技术(21)泛型之参数化类型的特点(续)

Java重要技术(22)泛型之参数化类型的本质

Java重要技术(24)泛型之使用反射访问参数化类型