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

平原网站建设电话企业网站设计网络公司

平原网站建设电话,企业网站设计网络公司,网站滑动效果怎么做,网络培训图片数组与泛型有很大的不同#xff1a; 1. 数组是协变的#xff08;covariant#xff09; 意思是#xff1a;如果Sub是Super的子类型#xff0c;则数组类型Sub[] 是数组类型Super[] 的子类型。 2. 泛型是不变的#xff08;invariant#xff09; 对于任何两种不同的类型Ty…数组与泛型有很大的不同 1. 数组是协变的covariant 意思是如果Sub是Super的子类型则数组类型Sub[] 是数组类型Super[] 的子类型。 2. 泛型是不变的invariant 对于任何两种不同的类型Type1 和Type2ListType1 既不是ListType2 的子类型也不是父类型。 现在有两段代码 Object[] objectArray new Long[1]; objectArray[0] I dont fit in; ListObject ol new ArrayListLong(); // Incompatible types ol.add(I dont fit in); 无论哪种方式都会报错因为不能把一个String 类型放到一个Long 类型容器中但是用一个数组的话在运行时才会报错对于列表可以在编译时就能发现错误。所以使用列表就有优势因为运行时报错的代价太高 3. 数组是具体化的在运行时才知道和强化他们的类型 就比如上面的代码将String保存到Long数组中就会得到ArrayStoreException异常 4. 泛型在编译时就强化它的类型信息并在运行时擦除它的元素类型信息 由于上面这些区别数组和泛型不能很好地混用所以new ListE[]new ListStringnew E[]这些语法都是错误的在编译时会产生一个泛型数组创建错误。 非法的原因是它不安全以下面这段代码为例 ListString[] stringLists new ListString[1]; // (1) ListInteger intList List.of(42); // (2) Object[] objects stringLists; // (3) objects[0] intList; // (4) String s stringLists[0].get(0); // (5) 假设第1行创建一个泛型数组是合法的第2行创建并初始化包含单个元素的ListInteger第3行将ListString 数组存储到Object数组变量中这是合法的因为数组是协变的第4行将ListInteger 存储在Object数组的唯一元素中这是因为泛型是通过擦除来实现的ListString[] 实例是List[]所以这个赋值不会产生ArrayStoreException 异常 现在问题就来了我们将一个ListInteger 实例存储到一个声明为ListString 实例的数组中为了防止这种情况出现第一行必须报错。 EListE 和ListString 等在技术上被称为不可具体化的类型指其运行时表示法包含的信息比它的编译时表示法包含的信息更少。唯一可具体化的参数化类型是无限制的通配符类型如List?等创建无限制通配符类型的数组是合法的但并不常用。 当泛型数组创建错误时最佳解决方案是使用集合类型ListE 。例如编写一个带有集合的Chooser类和一个方法方法返回集合中随机选择的一个元素。 public class Chooser {private final Object[] choiceArray;public Chooser(Collection choices) {choiceArray choices.toArray();}public Object choose() {Random rnd ThreadLocalRandom.current();return choiceArray[rnd.nextInt(choiceArray.length)];}public static void main(String[] args) {ListString list new ArrayList();list.add(1);list.add(2);list.add(3);Chooser chooser new Chooser(list);Object choose chooser.choose();System.out.println(choose);} } 如果想将choose方法的返回值从Object转换成每次调用该方法时想要的类型 public class ChooserT {private final T[] choiceArray;public Chooser(CollectionT choices) {choiceArray choices.toArray();}// choose 方法不变 } 上面的类会报错 如果加一条强制类型转换的话 choiceArray (T[]) choices.toArray(); 仍有报警信息 要消除上面的警告需要用列表代替数组 public class ChooserT {private final ListT choiceList;public Chooser(CollectionT choices) {choiceList new ArrayList(choices);}public T choose() {Random rnd ThreadLocalRandom.current();return choiceList.get(rnd.nextInt(choiceList.size()));} } 总结一下数组和泛型有着截然不同的类型规则1. 数组是协变且可以具体化的2. 泛型是不可变的且可以被擦除的
http://www.hkea.cn/news/14359237/

相关文章:

  • 遵化网站建设电商产品开发流程8个步骤
  • 哪个网站可以预约做头发的高端网站建设有哪些
  • 怎样免费建设个人网站新郑做网站公司
  • 网页设计与制作教程目录兰州新站seo
  • 南宁网站建设 传导广州建站模板平台
  • 怎么攻击织梦网站西安网站托管维护
  • 网站建设策划书范文网站如何不需要备案
  • 如何提升网站点击量微信页面转wordpress
  • 石狮网站建设报价app定制开发的公司
  • 网站添加内容wordpress 按装
  • 市场来说网站建设销售发展怎么样广州城乡建设部网站首页
  • 编程代码网站微网站建设包含哪些内容
  • 公司网站搜索引擎排名建设资格注册管理中心网站
  • 苍溪县建设局网站wordpress主题使用帮助
  • 台州有哪些做网站的公司店铺logo设计免费
  • 网站建设 网址导航优化排名推广教程网站
  • 保险网站西安网络推广平台公司
  • 网站建设模板报价网站的备案许可号不存在
  • 湛江企业网站一键网站建设
  • 广州网站建内容营销策略
  • 免费域名网站互联网传媒公司
  • 红安城市建设局投诉网站易企秀可以做微网站吗
  • 英文模板网站太原在线制作网站
  • 网站建设项目验收报告家装装修风格大全
  • 用照片做视频的网站好南京做网站软件
  • 怎么快速搭建网站珠海市建设工程交易网
  • 有哪些可以做网站的企业网站设计 职业
  • 哪里可以做企业网站seo免费教程
  • 网站建设实训报告要求广西建设网查询
  • 网站怎么做修改门户网站建立流程