Java小知识整理

来源:互联网 发布:淘宝开店卖景点门票 编辑:程序博客网 时间:2024/05/17 01:32

Java的泛型通配符

  以前看过几次没看懂,这次好好看了一下,大概明白是怎么回事儿了。
  简单地说,通配符是在定义包含泛型引用的时候使用,使该引用能指向传递了不同类型进去的泛型类对象。
  我们在创建包含泛型的类对象的时候,需要传递一个类参数进去,如

List<Number> lst = new List<Number>();

使用通配符时就传递?进去,代表它能匹配多种类型,如

List<? extend Number> la;/**或者List<?> la;*/

? extend Number 表示适用于Number类族的所有成员。lb就能指向传递了Number类族中任意一种类进去的泛型类对象,而不使用泛型的则只能指向一种。如

la = new ArrayList<Integer>();la = new ArrayList<Float>(); /** 这样则不行List<Number> lb;lb = new ArrayList<Integer>();*/

  复杂一点的,用泛型通配符这种形式创建的引用,就不能让它做任何需要判断类类型的操作,比如
la.add(new Integer);
而la.remove(0)这类则是可以的;
因为使用这种的通配符引用并不知道它指向的到底是传递了哪种类型进去的泛型类对象,最后判断出错。