泛型中的? 通配符以及泛型的边界

    xiaoxiao2021-04-14  34

    ?通配符

    当接收的类型不确定时,可以使用?通配符,?可以指向任何类型

    public class Demo { public static void main(String[] args) { xx(new ArrayList<String>()); xx(new ArrayList<Integer>()); } public static void xx(Collection<?> c){ /*当使用?通配符时,不能再调用与类型相关的方法 * 因为?指向的是一种不确定的类型 */ //c.add("sss"); c.size();//这个方法与类型无关 for(Object ob: c){ System.out.println(ob); } } }

    泛型的上边界和下边界

    1.限制上边界

    正确使用方法:Vector<? extends Number> x=new Vector<Integer>();

    错误使用方法:Vector<? extends Number> x=new Vector<String>();

    泛型类中的使用方法:

    //继承它的子类中的泛型必须实现Serializable和Cloneable接口 public class BaseDao<T extends Serializable,Cloneable> { } //例如 public class BookDao extends BaseDao<Book> { } //这里的Book需要实现这两个接口 public class Book implements Serializable,Cloneable{ }

    限制下边界

    正确使用方法:Vector<? extends Integer> x=new Vector<Number>();

    错误使用方法:Vector<? extends Integer> x=new Vector<Byte>();

    注意:以下代码编译不能通过

    public void add(List<? extends Number> list){ //当使用?通配符时,不能再调用与类型相关的方法,指定了边界也不行 list.add(100); }
    转载请注明原文地址: https://ju.6miu.com/read-669661.html

    最新回复(0)