当前位置: 首页 > news >正文

培训网站视频不能拖动怎么办wordpress 有点慢

培训网站视频不能拖动怎么办,wordpress 有点慢,校园服装网站建设演示文稿,客户管理软件文章目录 泛型擦除(1)转换泛型表达式(2)转换泛型方法泛型擦除带来的问题 泛型擦除 在编码阶段使用泛型时加上的类型参数,会被编译器在编译阶段去掉,这个过程叫做泛型擦除。 泛型主要用于编译阶段。在编译后生成的Java字节码文件中不包含泛型中的类型信息…

文章目录

    • 泛型擦除
      • (1)转换泛型表达式
      • (2)转换泛型方法
      • 泛型擦除带来的问题

泛型擦除

  在编码阶段使用泛型时加上的类型参数,会被编译器在编译阶段去掉,这个过程叫做泛型擦除。

  泛型主要用于编译阶段。在编译后生成的Java字节码文件中不包含泛型中的类型信息。例如,在编码时定义的List<Integer>List<String>经过编译后统一为List。JVM读取的只是List,由泛型附加的类型信息对JVM来说是不可见的。

Java核心技术卷I解释:

  无论何时定义一个泛型类型,都会自动提供一个相应的原始类型(raw type)。这个原始类型的名字就是去掉类型参数后的泛型类型名。类型变量会被擦除(erased),并替换为其限定类型(或者,对于无限定的变量则替换为Object)。

例如,

泛型类Pair<T>如下:

public class Pair<T>{private T first;private T second;public Pair(T first,T second){this.first=first;this.second=second;}public T getFirst(){return first;}public T getSecond(){return second;}public void setFirst(T newValue){first=newValue;}public void setSecond(T newValue){second=newValue;}
}

Pair<T>的原始类型如下所示:

public class Pair{private Object first;private Object second;public Pair(Object first,Object second){this.first=first;this.second=second;}public Object getFirst(){return first;}public Object getSecond(){return second;}public void setFirst(Object newValue){first=newValue;}public void setSecond(Object newValue){second=newValue;}
}

  因为T是一个无限定的变量,所以直接用Object替换。

  在程序中可以包含不同类型的Pair,例如Pair<String>Pair<LocalDate>。不过擦除类型后,它们都会编程原始的Pair类型。

  假定我们声明了泛型上限:

public class Interval<T extends Comparable&Serializable> implements Serializable{private T lower;private T upper;...public Interval(T first,T second){if(first.compareTo(second)<=0){lower=first;upper=second;}else{lower=second;upper=first;}}
}

  此时原始类型如下所示:

public class Interval implements Serializable{private Comparable lower;private Comparable upper;...public Interval(Comparable first,Comparable second){if(first.compareTo(second)<=0){lower=first;upper=second;}else{lower=second;upper=first;}}
}

  如果将限定切换为class Interval<T extends Serializable&Comparable>,原始类型会用Serializable替换T,而编译器在必要时要向Comparable插入强制类型转换。

(1)转换泛型表达式

  编写一个泛型方法调用时,如果擦出了返回类型,编译器会插入强制类型转换。例如:

Pair<Employee> buddies=...;
Employee buddy=buddies.getFirst();

  getFirst擦除类型后的返回类型是Object。编译器自动插入转换到Employee的强制类型转换。也就是说,编译器把这个方法调用转换为两条虚拟机指令:

  • 对原始方法Pair.getFirst的调用。
  • 将返回的Object类型强制转换为Employee类型。

  当访问一个泛型字段时,也要插入强制类型转换。假设Pair类的first字段和second字段都是公共的。表达式

Employee buddy=buddies.first;

  也会在结果字节码中插入强制类型转换。

(2)转换泛型方法

  类型擦除也会出现在泛型方法中。

public static <T extends Comparable> T min(T[] a)

  经过泛型擦除后,只剩下:

public static Comparable min(Comparable[] a);

  注意,类型参数T已经被擦出了,只留下了限定类型Comparable。

泛型擦除带来的问题

  当然,泛型擦除也带来了许多问题,这里就不细讲了,只是小总结下:

  • 不能用基本类型实例化类型参数
  • 运行时类型查询只适用于原始类型
  • 不能创建参数化类型的数组
  • 不能实例化类型变量
  • 不能构造泛型数组
  • 泛型类的静态上下文中类型变量无效
  • 不能抛出或捕获泛型类的实例
  • 可以取消对检查型异常的检查
  • 注意擦除后的冲突

参考:
《剑指Java》
《Java核心技术卷I》
泛型详解
泛型之类型擦除

http://www.yayakq.cn/news/814401/

相关文章:

  • 自己设计好的网站怎么设置访问鞍山诺亚人才网
  • 有什么免费做h5的素材网站云阳有没有做网站的
  • 网站建设可行性怎么做wep网站
  • 网站建设 深圳信科公司怎么做简单的网站
  • 用ps个人网站怎么做企微宝
  • 八大处网站建设荥阳网页设计
  • 类似于美团的网站怎么做公司宣传册怎么制作
  • 网站为什么做子域名网站建设教程视频百度云
  • 四川住房和城乡建设厅网站主页长沙百度搜索排名优化
  • 做网站买计划书做女团学什么舞蹈视频网站
  • 深圳网站建设龙华信科织梦新闻模板
  • 黔西网站建设石家庄新闻头条新闻
  • 苏州建设网官网怀化seo优化
  • 石家庄网站制作软件网站建设课程考核方案
  • 站长工具seo推广微信公众平台续费步骤
  • 爱站网关键词怎么挖掘ppt如何做链接打开一个网站
  • 在线自助网站按照程序优惠购网站怎么做的
  • 新房网站建设直播吧在线直播
  • 开源saas建站系统哪家代理注册公司好
  • 智能建站系统个人网站前端做网站
  • 教务处网站建设方案建设网站应该怎么做
  • 网站设计由哪个部门做公关公司是干嘛的
  • 做网络推广自己建网站房地产销售赚钱吗
  • 宿迁哪家做网站好新零售电商平台
  • 网站建设分几模块百度官方推广
  • wordpress放哪个目录下企业网站排名软件度智能优化
  • 什么网站可以做外贸html生成
  • 什么网站做奢侈品的工厂店主图详情页设计
  • 网站基本架构设计的主要步骤cms开发是什么意思
  • 网站建设时间计划表怎么做hello官方网站