`

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

 
阅读更多

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
     }
}
分享到:
评论

相关推荐

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

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

    PHP购物商城管理系统,采用php+mysql开发,原生代码无框架,代码易读易懂,面向过程编程,大学生编码手法。.zip

    近年来,PHP持续进行性能改进与新特性的引入,如PHP 7系列版本在速度上有了显著提升,新增了类型声明、标量类型提示、null合并运算符等语法特性,进一步提升了开发效率和代码质量。 总的来说,PHP作为一种成熟的Web...

    【社区论坛APP源码】社区校园APP源码分享+含后台

    另外,在写这个项目之前,我对 JavaScript 的掌握程度仅仅是勉强能使用 Jquery 和 Ajax,但 React 使用到了 ES6 的内容,因此许多 JS 的代码都是参照官网和Github上源码照猫画虎写的,并非专业前端,代码写的水平不...

    android坦克大战原码

    libs\ -- 原生态引擎库 res\ -- 图片,字符的资源库  src\ -- 程序(java)文件 AndroidManifest.xml -- 项目的配置文件  project.properties -- 配置Android版本文件 readme.txt -- 本内容 六.---- 不足与该...

    一个功能强大的评论系统,采用原生PHP编写.zip

    近年来,PHP持续进行性能改进与新特性的引入,如PHP 7系列版本在速度上有了显著提升,新增了类型声明、标量类型提示、null合并运算符等语法特性,进一步提升了开发效率和代码质量。 总的来说,PHP作为一种成熟的Web...

    基于MPChart的android原生图表库.zip

    多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板电脑、智能电视、汽车导航系统等。 此外,Android系统还有一些常见的问题,如应用崩溃、电池耗电过快、Wi-Fi连接问题、存储空间不足、...

    基于原生PHP7.4编写的动态博客系统,大二PHP动态网页设计期末作品,包含SQL脚本与数据库文件。.zip

    近年来,PHP持续进行性能改进与新特性的引入,如PHP 7系列版本在速度上有了显著提升,新增了类型声明、标量类型提示、null合并运算符等语法特性,进一步提升了开发效率和代码质量。 总的来说,PHP作为一种成熟的Web...

    flutter和Android原生,基于BasicMsgChannel和EventChannel通信的Demo.zip

    多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板电脑、智能电视、汽车导航系统等。 此外,Android系统还有一些常见的问题,如应用崩溃、电池耗电过快、Wi-Fi连接问题、存储空间不足、...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    NativeApp 使用传统原生态Android SDK来实现的应用 WebApp 基于浏览器来实现的一种应用 HybridApp 一种可以下载的Native App,其用户界面的全部或者部分元素在嵌入式浏览器组件(WebView之类的)里面运行 优雅降级...

    excel的使用

    首先打开“工具”菜单,单击“宏”命令中的“Visual Basic编辑器”,进入Visual Basic编辑环境,在“工程-VBAobject”栏中的当前表上单击鼠标右键,选择“插入”-“模块”,在右边栏创建下面的函数rrr,代码如下: ...

    KangPHP v2.0 正式版.rar

     kangPHP内置模板标签 支持模板缓存编译和译实时编译,支持php原生态语句并可轻松拓展其他模板引擎  跨平台性  kangPHP不仅完美支持LAMP平台而且对WAMP平台支持性也很卓越。用户完全不用担心跨平台出错  缓存...

    02408仿天涯论坛模板的免费论坛系统(php在线问答系统源码)v2.0.zip

    后台管理系统支持移动设备,可手机随时随地访问、管理和更新网站,开放式PHP原生态模板在线编译,音频视频发布直接生成HTML5代码,能够适应各种界面浏览器。 这个论坛系统虽然是仿天涯论坛制作的,但是很多功能也是...

    02408免费个人博客系统(兼多用户博客系统)v3.1.zip

    25.开放式PHP原生态模板,用户任意修改、穿插内容或广告,无需花时间研究额外规则,模板修改成本更低; 26.可对模板备份,使用备份模板,并可对模板恢复系统初始状态; 27.模板修改全站页面秒更新; 28.可自定义...

    大数据-Inceptor技术白皮书.pdf

    Spark可以运行在新一代资源管 理框架YARN上,它还可以读取已有的存放在Hadoop上的数据,这是个非常大的优势。 稳定性:由于代码质量问题,Spark长时间运行会经常出错,在架构方面,由于大量数据被缓存在内存中, ...

    免费个人博客系统(兼多用户博客系统)

    免费个人博客系统(兼多用户博客系统)是支持一个空间2个网站的全能型网站管理系统,本免费个人博客系统通用和拓展性强,博客、文章系统、商城、企业网站、个性化论坛等类型网站都可以使用,将来网站无论如何转型或...

    奥集能平台后端项目,面向组织的云操作系统

    Orginone以组织用户为中心,利用云原生技术提升应用和数据的管理能力,让组织更专注核心业务的代码和数据,以All-in-one方式降低组织中用户对工作的心智负担。保持平台开放和中立,通过更细颗粒度的划分服务边界,...

    Python语言程序设计基础(第2版)

    本书提出了以理解和运用计算生态为目标的Python语言教学思想,不仅系统讲解了Python语言语法,同时介绍了从数据理解到图像处理的14个Python函数库,向初学Python语言的读者展示了全新的编程语言学习路径。...

    深入理解Android:卷I--详细书签版

    looper类,掌握这些类的知识后方能在后续的代码分析中做到游刃有余;第6章以mediaserver为切入点,对android中极为重要的binder进行了较为全面的分析,深刻揭示了其本质。第7章对 audio系统进行了深入的分析,尤其...

Global site tag (gtag.js) - Google Analytics