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

济南商城网站制作/石家庄百度快速排名优化

济南商城网站制作,石家庄百度快速排名优化,郑州做响应式网站,长治房产网站建设在之前的几篇文章中,我们已经见识到了 泛型 的基本的形式,认识到了泛型的不可变特性,再一个就是泛型是在编译器检查参数合法性。本篇将就泛型的其他几种形式以及泛型实现协变和逆变的角度来进一步了解泛型。 泛型对不可变特性的补偿 由于泛型…

在之前的几篇文章中,我们已经见识到了 泛型 的基本的形式,认识到了泛型的不可变特性,再一个就是泛型是在编译器检查参数合法性。本篇将就泛型的其他几种形式以及泛型实现协变和逆变的角度来进一步了解泛型。

泛型对不可变特性的补偿

由于泛型是不可变的,这在实际使用中是很不方便的,因为 Java 世界中继承特性无处不在,于是泛型中出现了三个新的基本符号,extendssuper?,以及由此衍生出的 < E extends Number><? extends Number><? super Number>

泛型中的 ?和 E

? 表示和 E 都表示某一种原始类型,不同之处在于,E 的含义是某一种确定的类型,即在实例化的时候一定是确定的,而?则是不确定的其表示任意一种类型,这和泛型是编译器检查类型合规有关,这个符号允许了泛型表示多个类型而非单一的某一个类型。也由于这个特性,? 不会出现在泛型类的定义中,而只会出现在泛型方法的定义与泛型类型的对象声明。

extends 的使用-规定上界

在泛型中实现协变的要义是,形式类型参数 的关系要和泛型的类型关系一致,只不过由于泛型是不可变的,所以这里的形式类型参数由某一个变成了某一个范围。extends 的使用有三种情况,一种是定义泛型类,二是定义泛型方法,三是声明泛型对象。


  • 泛型类/接口的定义使用 extends 及泛型实现协变

DemoName< E extends Number> 是函数,E extends Number 表示 实际参数类型需要是 Number 或者 Number 的子类。从子类实例化父类的角度来说,子类<=父类, 实际参数类型 =<?E extends Number

public class DemoName<E extends Number>{DemoName<? extends Number> a=new DemoName<Number>();//泛型实现协变DemoName<? extends Number> b=new DemoName<Integer>();//泛型实现协变
}


  • 泛型方法的定义使用 extends

泛型方法本身是可以独立于泛型类而存在的,其作用的功效和泛型类一致,不同点在于,泛型类是对实例化的实际参数类型进行限定,泛型方法则是对方法的入参进行限定。当? 和 extends 结合的时候,具体的参数只能取值,无法被赋值,因为?表示一切,也就什么也不是,泛型是预编译期检查,所以无法通过set 方式赋值,但是可以通过整体对象方式赋值,get 方法取值不受影响。

   //泛型方法定义public static <E> List<? extends E> test(List<? extends E> list,E e){//list.add(e); //报异常,因为 list 是任何一种类型,set 操作无法通过编译,因为向上转化是有条件的,而泛型是预编译,故无法通过,而 get 方法不受影响list.get(0);return list;}//泛型方法调用public void test(){List<? extends Number> list=new ArrayList<Integer>();List<? extends Number> list2=DemoName.test(list,new Integer(1));}
super 的使用-规定下界

super 和 extends 的含义是相反的,而且,super 无法定义泛型类/接口,只能定义泛型方法,以及泛型对象的声明。其从形态上也只能和?结合,而不能和 E 结合。


  • 泛型方法中使用 super

? super E 表示 E或者 E的父类,最顶层的父类当然就是 Object 了。由于向下转化是自动进行的,所以此类型的泛型适合承接结果,即被赋值。

//泛型方法定义public static <E> List<? super E> test(List<? super E> list,E e){list.add(e);list.get(0);//get 方法并不受影响return list;}//泛型方法调用public void test(){List<? super Number> list=new ArrayList<Object>();//逆变Number a=1;List<? super Number> list2=DemoName.test(list,a);}
PECS

producer-extends consumer-super,方法中用于提供数据的类型写法是 ? extends E,使用承接数据的类型使用 ? super E

泛型的作用总结

限定类型,预编译检查安全,提高开发效率
明确类型,提高代码易读性
提高代码的重用率

http://www.lbrq.cn/news/1454023.html

相关文章:

  • 如何在自己的服务器上做网站/在线查询网站收录
  • 贵州省住房和城乡建设厅网/搜索引擎优化简称seo
  • 单位加强网站建设/2345网址导航大全
  • 网站会员注册系统怎么做视频/seo关键词查询
  • 网站软件下载安装/搜索引擎快速排名推广
  • 网站建设及管理使用情况汇报/seo网站关键词优化方法
  • 做外贸要有英文网站吗/seo教程网站
  • 网站挂到国外服务器地址/长沙百度推广开户
  • 贵州省城乡和建设厅网站/南阳网站优化公司
  • 怎样自己做免费的网站/seo教程论坛
  • 中石油第六建设公司网站/优化设计卷子答案
  • 优化网站制作/seo博客写作
  • 花卉物流园做网站的素材/电子商务网站建设案例
  • 网站模板 外贸工厂/百度打广告收费表
  • 如何在外贸平台推广/seo上海培训
  • 专做定制网站建设/百度关键词查询网站
  • 新媒体营销策划方案范文/网站推广优化排名教程
  • wordpress微商插件/seo怎么收费的
  • 云南网站设计/网站推广方案策划书2000
  • 新开的公司建立网站有哪些要做的/海淀区seo搜索引擎
  • 武汉平面设计公司/如何seo搜索引擎优化
  • 网站不备案可以做百度推广吗/产品软文范例500字
  • 网站建设方案及预算/5118站长工具
  • 网站开发手机app/谷歌浏览器app下载
  • 重复建设政务网站/苹果被曝开发搜索引擎对标谷歌
  • 济南集团网站建设公司好/孝感seo
  • 青田县住房和城乡规划建设局网站/企业管理培训
  • 网站 被 抄袭/seo域名如何优化
  • 什么是html5网站/竞价托管代运营公司
  • 自己做的网站套dedecms教程/国家反诈中心app下载
  • 8月4日星期一今日早报简报微语报早读
  • openeuler离线安装软件
  • 【实战】Dify从0到100进阶--中药科普助手(1)
  • Java 实现poi方式读取word文件内容
  • 推荐系统学习笔记(八)其他召回通道
  • 【stm32】按键控制LED以及光敏传感器控制蜂鸣器