• 泛型(Java 5 开始)


    前言

    Java 5 开始之前,从集合读取的数据都必须进行类型转换,如果插入错误的数据就会报错。
    
    有了泛型,编译器会自动为你的插入进行转换,并在插入时告知是否插入了类型错误的对象。
    
    
    将类型由原来的具体的类型参数化(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
    
    泛型只在编译阶段有效(泛型擦除)。
    
    泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法。
    

    分类

    泛型类:
    	public class Generic<T>	//最典型的就是各种容器类,如:List、Set、Map。
    
    泛型接口:
    	public interface Generator<T>	//泛型接口常被用在各种类的生产器中
    
    泛型方法:
    	public <T,K> K showKeyName(Generic<T> container)	//<T,K>必不可少,表明这是一个泛型方法
    
    	注:如果在泛型类中定义使用静态泛型方法,需要在静态泛型方法上添加额外的泛型声明,
    	    即使静态方法要使用泛型类中已经声明过的泛型也不可以。
    
    泛型上下边界(参数化类型是不可变的,所有需要泛型通配符):
    
    	Generic<?> obj    //可以接受任何类型作为泛型传入
    
    	Generic<? extends Number> obj    //只能传入number的子类或者number
    
    	Generic<? super Integer> obj    //只能传入Integer的父类或者Integer
    

    面试汇总

    泛型的作用:
    	在集合中存储对象并在使用前进行类型转换不方便。
    	泛型防止了那种情况的发生。
    	它提供了编译期的类型安全,确保你只能把正确类型的对象放入集合中,避免了在运行时出现ClassCastException。
    
    
    Java的泛型是如何工作的?什么是类型擦除:
    
    	有了泛型,编译器会自动为你的插入进行转换,并在插入时告知是否插入了类型错误的对象。
    
    	泛型是通过类型擦除来实现的,编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息。
    	例如 List 在运行时仅用一个 List 来表示。这样做的目的是确保能和 Java 5 之前的版本开发二进制类库进行兼容。
    	你无法在运行时访问到类型参数。
    	擦除使泛型可以与没有使用泛型的代码随意互用。
    
  • 相关阅读:
    HDU4474 Yet Another Multiple Problem BFS搜索
    HDU4473 Exam 数学分析
    2013ACM多校联合(4)
    POJ1273 网络流...
    HDU4472 Count 递推
    POJ1149 PIGS 网络流
    UVA10881 Piotr's Ants 想法题
    javascript js string.Format()收集
    修改 设置 vs.net 网站 调试 设为 起始页
    【转】HTML5杂谈 概念与现行游戏 割绳子 宝石迷阵
  • 原文地址:https://www.cnblogs.com/loveer/p/11805719.html
Copyright © 2020-2023  润新知