• java一般使用基础


    1.这是一个通用

    仿制药javaA型安全机制来保护。

    它是通过变量的类型,如果,实现变量类型限制,从而保证了程序编译变量类型的安全性在一定程度上。反之。如果没有泛型,这些只存在于程序,如果猿的大脑,这将导致类型转换异常发现,当程序执行。

    	//不用泛型
    		List list1 = new ArrayList();
    		list1.add(1);
    		Object o = list1.get(0);  //返回Object类型对象
    		Integer i = (Integer) o;  //需预先知道类型
    		
    		//用泛型
    		List<String> list2 = new ArrayList<String>();
    		list2.add("aaa");
    		String str = list2.get(0);    //直接返回定义时指定的类型,防止类型转换异常

    2.多泛型

    多泛型是指。在一个类型定义时使用多个泛型。在Map中多见多泛型的应用。例如以下:

    Map<String,String> map = new HashMap<String,String>();
    		Set<Map.Entry<String,String>> set = map.entrySet();
    		for(Iterator<Map.Entry<String,String>> iter = set.iterator();iter.hasNext();){
    			String key = iter.next().getKey();
    			String value = iter.next().getValue();
    		}
    //多泛型定义
    public class MutilGeneric<T,E> {
    <span style="white-space:pre">	</span>private T attr1; //定义成员变量
    <span style="white-space:pre">	</span>private E attr2;
    

    3.限制泛型可用类型

    不限制泛型类别时,能够使用不论什么类型来实例化泛型类型中的类型。即在不设置默认类型时。泛型类型一般是Object,但在实际开发中,我们往往须要对类型加以限制,指定泛型类型仅仅能在一定的范围内。java泛型中给我们提供了这种机制。通过extendskeyword。我们就能够指定泛型类型范围,这里指定的类型必须是继承自某个类或实现某个接口。详细定义例如以下:

    /**
     * 定义泛型类,限制类型仅仅能为List<Person>的子类
     * @author caoxr
     * @param <T>
     */
    public class PersonSeqUtil<T extends List<Person>> {
    4.类型通配符<?

    >或<? extends ClassType>

    个人理解类型通配符的使用,是为了实如今定义泛型类持有者时,限制泛型可用类型的范围,扩展泛型类型持有者对象可接纳类型的范围。代码示意例如以下:

    	PersonSeqUtil<LinkedList<Person>> psu1 = new PersonSeqUtil<LinkedList<Person>>();
    		PersonSeqUtil<ArrayList<Person>> psu2 = new PersonSeqUtil<ArrayList<Person>>();
    		//运用通配符定义PersonSeqUtil对象,使其传入类型仅仅能为List<person>的子类
    		PersonSeqUtil<? extends List<Person>> psu = null;
    		psu = new PersonSeqUtil<LinkedList<Person>>();
    		psu = new PersonSeqUtil<ArrayList<Person>>();
    		//也能够通过super定义,要求指定类型为指定继承类型的父类
    		PersonSeqUtil<? super ArrayList<Person>> psu3 = null;
    		psu3 = new PersonSeqUtil<List<Person>>();
    		
    		List<?

    extends Object> list = new ArrayList<Object>(); list.add(null); list.add("haha"); //报错,编译不通过


    注意上述代码中,当向list中add null时,代码是编译通过的,而当放入字符串“haha”时,则编译不通过,按常理分析。Object类为所以类型的父类,应该是编译通过的。但其实并不是如此,由于从list的定义来看,list仅仅同意放Object的子类。但不知道详细放什么类型。假设能放入详细类型的话,这就意味着当我们再取出时,必须记得它是什么类型。然后强制转获取的变化进入值。因此,我们失去了仿制药的意义。

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    04_上架APPstore时候的宣传页尺寸
    03_iOS导航栏的正确隐藏方式
    02_iOS 沙盒及各个目录详解
    01_可变数组用copy修饰之后还是可变的的吗
    IOS label 设置行高
    Xcode11更改启动页设置方法
    swift 5.0 创建button方法
    ios 淘宝评论详情、朋友圈布局masony实现
    mysql安装问题
    重装win7时遇到点小问题
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4744736.html
Copyright © 2020-2023  润新知