`

请不要在新代码中使用原生态类型

 
阅读更多

A:原生态类型如 List:不带任何类型参数的泛型名称

B:参数化类型如List<String> :表示元素类型为String的列表
C:无限制的通配符类型如List<?>:表示元素为未知类型
 
参数化类型优点
1)安全,提供了编译前检查
2)方便,不用显示的cast,自动完成
原生态类型存在的主要目的是兼容性。
 
List和List<Object>区别
后者提供了编译期检查,明确的表明集合中可以放任何类型的元素
举例:对于方法 f(List param)和方法f(List<Object>),前者可以接受List<String>和List<Integer>类型的元素,后者则不行;因为后者可以接受任何类型的元素,即是Object类的子类,而List<String>只能接受String类型的元素,List<Integer>只能接受Integer类型的元素
因此,List类型丢了了安全性,而List<Object>保证了安全性
 
List和List<?>区别
后者一般用于只读模式
List<?>因为不知道里面元素的类型,所以不能执行add方法,除非是null
 
import java.util.ArrayList;
import java.util.List;
public class ListDemo {
 
     /**
      * @param args
      */
     public static void main(String[] args) {
           // TODO Auto-generated method stub
          List<String> strings = new ArrayList<String>();
           //方法add1和add2显示了List和List<Object>的区别
           //方法add1
           //由于参数是List,当把List<String>作为参数传进来时,list添加了一个Integer类型,
           //string列表中添加了Integer类型的元素,破坏了安全性
           add1(strings,new Integer(1));
          String s = strings.get(0); //出错,因为是Integer类型
          
           //方法add2无法通过编译,因为无法接受List<String>作为参数
           //The method add2(List<Object>, Object) in the type ListDemo is
           //not applicable for the arguments (List<String>, Integer)
           add2(strings,new Integer(1));
          
           //方法add1和add3显示了List和List<?>的区别
           //方法add3无法通过编译,List<?>一般只能用于读取,不能add,除非是null
           //The method add(capture#1-of ?) in the type List<capture#1-of ?>
           //is not applicable for the arguments (Object)
           add3(strings,new Integer(1));
 
     }
     private static void add1(List list,Object o)
     {
           list.add(o);
     }
     private static void add2(List<Object> list,Object o)
     {
          list.add(o);
     }
     private static void add3(List<?> list,Object o)
     {
          list. add(o);//错误
          list.add(null);//正确,可以添加null
     }
}
分享到:
评论

相关推荐

    原生态Ajax价绍与使用方法.pdf

    * 可以在任何支持JavaScript的浏览器中使用 * 可以实现基本的Ajax功能 原生态Ajax的缺点: * 需要编写更多的代码 * 需要手动处理响应数据 * 不支持高级的Ajax功能 Ajax是一种强大的技术,可以实现在网页上进行...

    js原生态标签云球形滚动特效代码.zip

    【标题】"js原生态标签云球形滚动特效代码.zip" 涉及的知识点主要集中在JavaScript编程语言、网页特效的实现以及HTML和CSS的基础应用上。这种特效通常用于网站的导航菜单或展示标签,以独特的方式吸引用户注意力并...

    js原生态插件 模仿flash鼠标经过动态悬停效果导航菜单代码.zip

    "js原生态插件 模仿flash鼠标经过动态悬停效果导航菜单代码.zip" 这个标题表明我们关注的是一个基于JavaScript的原生插件,它的主要功能是模仿Flash中的动态悬停效果,应用于网页的导航菜单。在Flash逐渐被淘汰的...

    ajax在joomla中的原生态应用代码

    在Joomla中使用原生态AJAX应用代码主要涉及到如何利用Joomla自带的MooTools JavaScript库来实现前端与后端的异步交互。通过AJAX,可以在不重新加载页面的情况下与服务器交换数据并更新部分网页内容。这种方法特别...

    安卓原生态的图表achartengine

    要在Android项目中使用AChartEngine,首先需要将其依赖库添加到项目中。通常,可以通过在build.gradle文件中添加如下依赖: ```groovy dependencies { implementation 'org.achartengine:achartengine:1.2.0' } ``...

    python高级调试技巧(一)——原生态的pdb调试.pdf

    Python 高级调试技巧(一)——原生态的 pdb 调试 Python 高级调试技巧(一)——原生态的 pdb 调试是 Python 高级调试技巧系列的第一篇,主要介绍了原生态的 pdb 调试技巧。pdb 是 Python 自带的调试模块,可以...

    iOS计算器(原生态差不多)

    本项目"iOS计算器(原生态差不多)"旨在实现一个功能完备且用户体验良好的计算器应用。下面将详细讨论这个项目中涉及的关键知识点。 1. 自定义按钮(UIButton): 在iOS开发中,我们通常使用UIButton来创建可点击...

    javascript+php原生态写的上传文件,可多选文件,解决formdata()后端只接到一个图片和图片中有恶意代码的问题

    可进行压缩图片和添加水印,对图片有恶意代码的进行重新创建新图片替代,如果不是图片类型的禁止上传,改后缀,工具改二进制码为图片码都无效,前后端都进行检测,避免关闭javascript进行渗透。

    Go-一个将Go编译成JavaScript的编译器用于在浏览器中运行Go代码

    为了在浏览器中使用GopherJS,开发者首先需要安装GopherJS编译器,然后将Go源代码编译为目标JavaScript文件。这通常通过简单的命令行操作完成,如`gopherjs build`或`gopherjs serve`。编译后的JavaScript文件可以...

    原生态js根据不同的条件要求点击后显示不同的表单内容效果源码.zip

    这个名为"原生态js根据不同的条件要求点击后显示不同的表单内容效果源码.zip"的资源提供了一个使用纯JavaScript实现这一功能的实例。纯JavaScript,即不依赖任何外部库如jQuery,是一种轻量级且灵活的方式来操控网页...

    前端最基本html代码,可以执行

    在CSS中,我们可以使用`:hover`伪类来控制元素在鼠标悬停时的样式。例如: ```html 隐藏的内容 触发元素 .hiddenDiv { display: none; } .container .trigger:hover + .hiddenDiv { display: block; } ``...

    java原生态扫雷小游戏.zip

    Java原生态扫雷小游戏是一个基于Java编程语言开发的简单娱乐应用。该项目展示了如何利用Java的基础知识,如面向对象编程、事件处理以及图形用户界面(GUI)设计,来创建一个交互式的桌面游戏。以下是对这个项目的...

    原生态纯JavaScript 100大技巧大收集

    ### 原生态纯JavaScript 100大技巧大收集 #### 1. 字符串长度截取 在处理文本时,我们常常需要对字符串进行截取,特别是当需要显示预览或者摘要时。该技巧提供了原生JavaScript实现的字符串长度截取功能。 **函数...

    Mastering TypeScript - Second Edition 原书高清PDF及代码

    TypeScript是JavaScript的一个超集,它在JS的基础上引入了静态类型系统,提升了代码质量和可维护性。本书旨在帮助开发者从初学者到精通者,全面掌握TypeScript的使用技巧和最佳实践。 1. **TypeScript基础知识**:...

    坦克大战 仅用350行代码完成编写 原版

    350行代码的精炼程度在游戏开发中是相当罕见的,这充分展示了高效编码的魅力。 首先,C#是.NET框架的基础,它是一种面向对象的、类型安全的编程语言,具有丰富的库支持和强大的性能。在这个项目中,C#用于实现游戏...

    此示例演示了在桌面Web和移动环境中使用相同的ReactNative代码

    3. **JavaScript和TypeScript支持**:虽然主要使用JavaScript,但React Native也支持TypeScript,提供了更好的类型检查和开发工具支持,有助于防止错误并提高代码质量。 4. **热重载(Hot Reloading)**:React ...

    原生态二维码生成和扫描(iOS源代码)

    本项目“原生态二维码生成和扫描(iOS源代码)”正是基于这一核心思想,提供了完整的iOS应用程序示例,帮助开发者深入理解并应用这些技术。该项目由公主_西创建,并采用MIT许可协议,允许自由使用和修改。 1. **Core...

    layui-main一套遵循原生态开发模式的 Web UI 组件库

    layui-main 是一个基于原生 JavaScript 开发的 Web UI 组件库,它的设计宗旨是遵循原生态的开发模式,强调简洁高效、易于理解和使用。在 Web 应用开发中,UI 组件库扮演着至关重要的角色,它能帮助开发者快速构建...

    【JavaScript源代码】为什么推荐使用JSX开发Vue3.docx

    本文将探讨为什么推荐在Vue3中使用JSX,以及它所带来的优势。 首先,Vue3官方已经原生支持JSX,并提供了jsx.d.ts文件以方便开发者使用。这一改变表明社区对JSX的需求在推动Vue3的发展。例如,流行的UI框架AntDesign...

Global site tag (gtag.js) - Google Analytics