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

太平建设公司官方网站/搭建网站流程

太平建设公司官方网站,搭建网站流程,威海哪里做网站,明年做啥网站能致富首先介绍一些术语 。 声明中具有一个或者多个类型参数( type parameter )的类或者接口,就是泛型( generic )类或者接口 。 例如,List 接口就只有单个类型参数 E ,表示列表的元素类型 。这个接口…

        首先介绍一些术语 。 声明中具有一个或者多个类型参数( type parameter )的类或者接口,就是泛型( generic )类或者接口 。 例如,List 接口就只有单个类型参数 E ,表示列表的元素类型 。这个接口的全称是 List<E> (读作“ E 的列表”),但是人们经常把它简称为 List 。 泛型类和接口统称为泛型( generic type ) 。

        每一种泛型定义一组参数化的类型( parameterized type),构成格式为 : 先是类或者接口的名称,接着用尖括 号(<>) 把对应于泛型形式类型参数的实际类型参数列表括起来 。 例如,List< String> (读作 “字符串列表”)是一个参数化的类型,表示元素类型为 String 的列表 。(String 是与形式的类型参数 E 相对应的实际类型参数 。)

        最后一点,每一种泛型都定义一个原生态类型( raw type ),即不带任何实际类型参数的泛型名称 。 例如,与 List < E>相对应的原生态类型是 List 。 原生态类型就像从类型声明中删除了所有泛型信息一样 。 它们的存在主要是为了与泛型出现之前的代码相兼容 。

        在 Java 增加泛型之前,下面这个集合声明是值得参考的 。 从 Java 9 开始,它依然合法,但是已经没什么参考价值了:

private final Collection stamps = ...;

        如果现在使用这条声明,并且不小心将一个 coin 放进了 stamp 集合中,这一错误的插入照样得以编译和运行,不会出错(不过编译器确实会发出一条模糊 的警告信息) :

stamps.add(new Coin( ... ));

直到从 stamp 集合中获取 co 工 n 时才会收到一条错误提示:

for (Iterator i = stamps.iterator(); i.hasNext(); )Stamp stamp = (Stamp) i.next(); stamp.cancel() ;

        出错之后应该尽快发现, 最好是编译时就发现。在本例中,直到运行时才发现错误,已经出错很久了,而且它在代码中所处的位置,距离包含错误的这部分代码已经很远了 。一旦发现ClassCastException ,就必须搜索代码,查找将coin 放进 stamp 集合的方法调用 。 此时编译器帮不上忙,因为它无法理解这种注释 :“ Contains only Stamp instances ”(只包含 Stamp 实例)。

有了泛型之后,类型声 明中可以包含以下信息,而不是注释 :

private final Collection<Stamp> stamps = ...;

        通过这条声明,编译器知道 stamps 应该只包含 Stamp 实例,并给予保证( guarantee),假设整个代码库在编译过程中都没有发出任何警告 。当 stamps利用一个参数化的类型进行声明时,错误的插入会产生一条编译时的错误消息,告诉你具体是哪里出错了。

        从集合中检索元素时,编译器会替你插入隐式的转换,并确保它们不会失败(依然假设所有代码都没有产生或者隐瞒任何编译警告) 。 假设不小心将 coin 插入 stamp 集合,这显得有点牵强,但这类问题却是真实的 。 例如,很容易想象有人会不小心将一个Biginteger 实例放进一个原本只包含 BigDecimal 实例的集合中 。

        如上所述,使用原生态类型(没有类型参数的泛型)是合法的,但是永远不应该这么做 。 如果使用原生态类型,就失掉了泛型在安全性和描述性方面的所有优势 。 既然不应该使用原生态类型 ,为什么 Java 语言的设计者还要允许使用它们呢?这是为了提供兼容性 。

        因为泛型出现的时候,Java 平台即将进入它的第二个十年,已经存在大量没有使用泛型的Java 代码 。 人们认为让所有这些代码保持合法,并且能够与使用泛型的新代码互用,这一点很重要。它必须合法才能将参数化类型的实例传递给那些被设计成使用普通类型的方法,反之亦然 。 这种需求被称作移植兼容性( Migration Compatibility ),促成了支持原生态类型,以及利用擦除( erasure) 实现泛型的决定 。

        虽然不应该在新代码中使用像 List 这样的原生态类型,使用参数化的类型以允许插入任意对象(比如 List<Object >)是可行的 。 原生态类型 List 和参数化的类型 List<Object>之间到底有什么区别呢?不严格地说,前者逃避了泛型检查,后者则明确告知编译器,它能够持有任意类型的对象。 虽然可以将 List<String> 传递给类型 List 的参数,但是不能将它传给类型 List<Object>的参数。 泛型有子类型化( subtyping )的规则,List<String>是原生态类型 List 的一个子类型,而不是参数化类型 List<Object>的子类型 。因此, 如果使用像 List 这样的原生态类型,就会失掉类型安全性 , 但是如果使用像 List<Object >这样的参数化类型,则不会

        为了更具体地进行说明,请参考下面的程序:

public static void main(String[] args) {List<String> strings = new ArrayList<>();unsafeAdd(strings, Integer.value0f(42));String s = strings.get(0); // Has compiler-generated castprivate static void unsafeAdd(List list, object o) {list.add(o);
}

        这段程序可以进行编译,但是因为它使用了原生态类型 List ,你会收到一条警告:

        实际上,如果运行这段程序,在程序试图将 strings.get(o)的调用结果 Integer转换成 String时,你会收到一个 ClassCastException 异常 。 这是一个编译器生成的转换,因此一般保证会成功,但是我们在这个例子中忽略了一条编译器警告,为此付出了代价 。如果在 unsafeAdd 声明中用参数化类型 List<Object>代替原生态类型 List ,并试着重新编译这段程序,会发现它无法再进行编译了,并发出以下错误消息:

        在不确定或者不在乎集合中的元素类型的情况下,你也许会使用原生态类型 。 例如,假设想要编写一个方法,它有两个集合,并从中返回它们共有元素的数量 。 如果你对泛型还不熟悉,可以参考以下方式来编写这种方法:

static int numElementsInCommon(Set s1, Set s2) {int result = 0;for (Object o1 : s1)if (s2.contains(o1))result++;return result;
}

        这个方法可行,但它使用了原生态类型,这是很危险的 。 安全的替代做法是使用无限制的通配符类型( unbounded wildcard type ) 。 如果要使用泛型,但不确定或者不关心实际的类型参数,就可以用一个问号代替 。 例如,泛型 Set<E>的无限制通配符类型为 Set <?>(读作“某个类型的集合”) 。 这是最普通的参数化 S et 类型,可 以持有任何集合 。 下面是numElementsinCommon 方法使用了无限制通配符类型时的情形 :

static int numElementsInCommon(Set<?> s1, Set<?> s2) {...}

        无限制通配类型 Set <>和原生态类型 Set 之间有什么区别呢?这个问号真正起到作用了吗?这一点不需要赘述,但通配符类型是安全的,原生态类型则不安全 。 由于可以将任何元素放进使用原生态类型的集合中,因此很容易破坏该集合的类型约束条件(如之前范例中所示的 unsafeAdd 方法);但不能将任何元素(除了 null 之 外)放到 Collection < ?>中 。 如果尝试这么做,将会产生一条像这样的编译时错误消息:

        这样的错误消息显然无法令人满意,但是编译器已经尽到了它的职责,防止你破坏集合的类型约束条件 。 你不仅无法将任何元素(除了 null 之外)放进 Collection <?> 中,而且根本无法猜测你会得到哪种类型的对象 。 要是无法接受这些限制,就可以使用泛型方法或者有限制的通配符类型 。

        不要使用原生态类型,这条规则有几个小小的例外 。 必须在类文字中 使用原生态类型 。 规范不允许使用参数化类型(虽然允许数组类型和基本类型)。换句话说, List.class 、 String[].class 和 int.class 都合法,但是 List<String.class 和 List<?>.class 则不合法 。

        这条规则的第二个例外与 ins ta口 ceof 操作符有关 。 由于泛型信息可以在运行时被擦除,因此在参数化类型而非无限制通配柯:类型上使用 instanceof 操作符是非法的 。 用无限制通配符类型代替原生态类型,对 instanceof 操作符的行为不会产生任何影响 。 在这种情况下,尖括号( <>)和问号(?)就显得多余了 。 下面是利用泛型来使用 instanceof操作符的首选方法

if (o instanceof Set) {Set<?> s = (Set<?>) o;
}

        注意,一旦确定这个 o 是个 Set ,就必须将它转换成通配符类型 Set <?>,而不是转换成原生态类型 Set 。 这是个受检的( checked )转换,因此不会导致编译时警告 。

        总而言之,使用原生态类型会在运行时导致异常,因此不要使用 。 原生态类型只是为了与引人泛型之前的遗留代码进行兼容和互用而提供的 。 让我们做个快速的回顾:Set<Object >是个参数化类型,表示可以包含任何对象类型的一个集合;Set <?>则是一个通配符类型,表示只能包含某种未知对象类型的一个集合;Set 是一个原生态类型,它脱离了泛型系统 。 前两种是安全的,最后一种不安全。

相关文章:

Effective Java笔记(26)请不要使用原生态类型

首先介绍一些术语 。 声明中具有一个或者多个类型参数&#xff08; type parameter &#xff09;的类或者接口&#xff0c;就是泛型&#xff08; generic &#xff09;类或者接口 。 例如&#xff0c;List 接口就只有单个类型参数 E &#xff0c;表示列表的元素类型 。这个接口…...

linux 内存 - KO内存占用

说明 KO(kernel module)占用的内存分为两部分&#xff1a; 静态占用 &#xff1a;ko insmod时系统固定分配的内存。动态申请 &#xff1a;代码中动态申请的内存&#xff0c;由于申请方式不同&#xff0c;统计的方式也可能不同&#xff0c;例如&#xff1a;使用vmalloc和kmall…...

2023.8.7论文阅读

文章目录 CMUNeXt: An Efficient Medical Image Segmentation Network based on Large Kernel and Skip Fusion摘要本文方法实验结果 Boundary Difference Over Union Loss For Medical Image Segmentation&#xff08;损失函数&#xff09;摘要本文方法实验结果 CMUNeXt: An E…...

2023河南萌新联赛第(五)场:郑州轻工业大学 --Kruskal

题目描述 给定一张nnn个点的无向完全图&#xff0c;其中两点之间的路径边权为两点编号的按位与&#xff08;编号为 (1,2,...,n)(1,2,...,n)(1,2,...,n)&#xff09;&#xff0c;即w(u,v)u&v(1≤u,v≤n)w\left(u, v \right )u\&v \left( 1 \le u, v \le n \right)w(u,v…...

Maven引入本地jar包

maven做为一种强大的依赖管理工具&#xff0c;可以帮助我们更方便的管理项目中的依赖&#xff1b;而在使用过程中我们难免会有需要引入本地jar包的需求&#xff0c;这里踩过坑之后我分享俩种引入方式&#xff1b; 1.上传jar到本地maven仓库&#xff0c;再引入 使用此方法后可…...

Java并发编程实战——结构化并发应用程序

文章目录 6 任务执行6.1 在线程中执行任务6.1.1 串行地执行任务6.1.2 显式地为任务创建线程6.1.3 无限制创建线程的不足 6.2 Executor框架6.2.1 示例&#xff1a;基于Executor的Web服务器6.2.2 执行策略6.2.3 线程池6.2.4 Executor的生命周期6.2.5 延迟任务与周期任务 6.3 找出…...

uniapp echarts 点击失效

这个问题网上搜了一堆&#xff0c;有的让你降版本&#xff0c;有的让你改源码。。。都不太符合预期&#xff0c;目前我的方法可以用最新的echarts。 这个方法就是由npm安装转为CDN&#xff0c;当然你可能会质疑用CDN这样会不稳定&#xff0c;那如果CDN的地址是本地呢&#xff1…...

手机开启应急预警通知 / 地震预警

前言 安卓手机在检测到地震时&#xff0c;将发送地震预警通知&#xff0c;但此设置是默认关闭的&#xff0c;原因是以防引发用户恐慌从而引发安全问题&#xff0c;且开启此设置需要完成指引教程&#xff0c;因此默认关闭此设置。下文介绍如何开启此设置。 开启方法 华为手机开…...

2020年12月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题(共25题,每题2分,共50分) 第1题 执行语句print(10==10.0)的结果为? A:10 B:10.0 C:True D:False 正确的答案是 C:True。 解析:在Python中,比较运算符 “==” 用于比较两个值是否相等。在这个特定的比较中,整数10和浮点数10.0在数值上是相等的。…...

遇到无法复现的 Bug

当我们在软件开发过程中遇到无法复现的 Bug 时&#xff0c;这可能会让我们感到头疼和困惑。处理这种 Bug 需要一些技巧和方法来帮助我们更好地解决问题。本篇博客将为大家总结一些常用的技术手段和策略&#xff0c;希望能对开发者们在日常工作中遇到类似问题时提供一些帮助。 …...

虚拟列表的实现(简单易懂)

起因&#xff1a; app开发过程中遇到需要渲染3000行的列表&#xff0c;页面直接卡顿&#xff0c;所以开始研究起虚拟列表 实现前提条件&#xff1a; item项等高列表 实现思路&#xff1a; 首先是dom结构&#xff1a; 定义一个容器&#xff08;固定高度&#xff09;&#…...

【WordPress】如何在WordPress中实现真·页面路由

这篇文章也可以在我的博客中查看 页面路由 是什么 页面路由是指从url顺着网线砍到网站内容的途径&#xff0c;说人话就是地址与页面的映射。 就像真实世界的地址一样&#xff0c;我要找你&#xff0c;必须知道你的地址。 在网站中&#xff0c;通过地址找内容的机制&#xf…...

Android界面设计与用户体验

Android界面设计与用户体验 1. 引言 在如今竞争激烈的移动应用市场&#xff0c;提供优秀的用户体验成为了应用开发的关键要素。无论应用功能多么强大&#xff0c;如果用户界面设计不合理&#xff0c;用户体验不佳&#xff0c;很可能会导致用户流失。因此&#xff0c;在Androi…...

基于 FFmpeg 的跨平台视频播放器简明教程(八):音画同步

系列文章目录 基于 FFmpeg 的跨平台视频播放器简明教程&#xff08;一&#xff09;&#xff1a;FFMPEG Conan 环境集成基于 FFmpeg 的跨平台视频播放器简明教程&#xff08;二&#xff09;&#xff1a;基础知识和解封装&#xff08;demux&#xff09;基于 FFmpeg 的跨平台视频…...

【NLP pytorch】基于BiLSTM-CRF模型医疗数据实体识别实战(项目详解)

基于BiLSTM-CRF模型医疗数据实体识别实战 1数据来源与加载1.1 数据来源1.2 数据类别名称和定义1.3 数据介绍2 模型介绍2 数据预处理2.1 数据读取2.2 数据标注2.3 数据集划分2.4 词表和标签的生成3 Dataset和DataLoader3.1 Dataset3.2 DataLoader4 BiLSTM模型定义5 CRF模型6 模型…...

人工智能原理(1)

*请注意&#xff0c;本文仅供学习使用* 目录 一、人工智能发展 1、孕育期 2、摇篮期 3、形成期 4、发展期&#xff08;1970-1979&#xff09; 5、实用期 6、稳步发展期 二、何为人工智能 1、智能的主要观点 2、智能定义 3、人工智能定义 三、人工智能研究方法 1、…...

预测成真,国内传来三个消息,中国年轻人变了,创新力产品崛起

中国的年轻人真的变了&#xff01; 最近&#xff0c;国内传来三个消息&#xff0c;让外媒的预测成真。 第一&#xff0c;奥迪要开始用国产车的平台了。这里需要说明的是新能源汽车&#xff0c;奥迪也曾多次公开表示&#xff0c;承认了当前中国新能源汽车核心技术上的领先。 第…...

维深(Wellsenn):2023中国消费端VR内容开发商调研报告(附下载

关于报告的所有内容&#xff0c;公众【营销人星球】获取下载查看 核心观点 国内互联网大厂商入局VR&#xff0c;字节跳动、网易表态明确。字节跳动2021年收购国内头部VR硬件厂商PICO后&#xff0c;加速构建VR内容生态&#xff0c;2021年 成立海南创见未来当前已推出VR视频应用…...

redis事务管理详解

事务管理 事务管理乐观锁与悲观锁watch命令实现乐观锁watch命令示例 事务管理 Redis 提供了事务管理功能&#xff0c;可以通过 Redis 的 MULTI、EXEC、WATCH 和 DISCARD 命令来实现。 开启事务&#xff1a; 使用 MULTI 命令开始一个事务&#xff0c;表示接下来执行的命令都属于…...

国产低功耗蓝牙HS6621CxC/6621Px系列支持Find My网络功能方案芯片

目录 什么是“Find My“&#xff1f;HS6621系列简介 什么是“Find My“&#xff1f; “Find My”是苹果公司于19年前推出的针对失物追踪&#xff0c;Find My iPhone&#xff08;查找我的iPhone&#xff09;和Find My Friends&#xff08;查找朋友&#xff09;的结合体应用。为…...

【openGauss】分区表的介绍与使用

一、openGauss分区表介绍 在openGauss中&#xff0c;数据分区是在一个节点内部对数据按照用户指定的策略做进一步的水平分表&#xff0c;将表中的数据按照指定方式划分为多个互不重叠的部分。 对于大多数用户使用场景&#xff0c;分区表和普通表相比具有以下优点&#xff1a; …...

代码随想录算法训练营day57

文章目录 Day57回文子串题目思路代码 最长回文子序列题目思路代码 Day57 回文子串 647. 回文子串 - 力扣&#xff08;LeetCode&#xff09; 题目 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。…...

【基础类】—前后端通信类系统性学习

一、什么是同源策略及限制 同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的关键的安全机制。源&#xff1a;协议、域名和端口&#xff0c; 默认端口是80 三者有一个不同&#xff0c;即源不同&#xff0c;就是跨域 ht…...

vite项目中使用@代表根路径

1.配置vite.config.ts import { defineConfig } from vite import vue from vitejs/plugin-vue import path from pathexport default defineConfig({plugins: [vue()],resolve: {alias:{: path.resolve(__dirname, src) }} })2.报错path和__dirname 找不到模块“path”或其相…...

冶金化工操作VR虚拟仿真实验软件提高员工们协同作业的配合度

对于高风险行业来说&#xff0c;开展安全教育培训是企业的重点工作&#xff0c;传统培训逐渐跟不上时代变化和工人需求&#xff0c;冶金安全VR模拟仿真培训系统作为一种新型的教育和培训工具&#xff0c;借助VR虚拟现实技术为冶金行业的工人提供一个安全、高效的培训环境。 冶金…...

SQL Server数据库 -- 索引与视图

文章目录 一、索引 聚集索引非聚集索引二、视图三、自定义函数 标量函数表值函数四、游标五、总结 前言 在学习完创建库表、查询等知识点后&#xff0c;为了更加方便优化数据库的存储和内容&#xff0c;我们需要学习一系列的方法例如索引与视图等等&#xff0c;从而使我们更加…...

2023 java web面试秘籍

目录 第一章&#xff1a;Java Web基础知识1.介绍3.Java Web基本概念 4.常见面试问题第二章&#xff1a;Java Web核心概念和技术1.介绍3.Servlet和JSP4.Web安全5.常见面试问题 第三章&#xff1a;Java Web高级概念和技术1.介绍3.Spring框架4.安全性5.常见面试问题 第四章&#x…...

2023-08-05力扣今日二题

链接&#xff1a; 剑指 Offer 18. 删除链表的节点 题意&#xff1a; 如题 解&#xff1a; 基础链表操作 实际代码&#xff1a; #include<iostream> using namespace std; struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {} }; Li…...

stl_list类(使用+实现)(C++)

list 一、list-简单介绍二、list的常用接口1.常见构造2.iterator的使用3.Capacity和Element access4.Modifiers5.list的迭代器失效 三、list实现四、vector 和 list 对比五、迭代器1.迭代器的实现2.迭代器的分类&#xff08;按照功能分类&#xff09;3.反向迭代器(1)、包装逻辑…...

利用hfish反控境外攻击源主机

导师给了7个网络安全课题选题&#xff0c;本想和他聊了下思路&#xff0c;他一挥手让我先做出点东西再来聊就把我打发走了…… 正好前段时间阿里云到校做推广&#xff0c;用优惠卷薅了一台云服务器&#xff0c;装了hfish先看下情况 没想到才装上没两天数据库就爆了&#xff0…...