java 中符号_谁能告诉我java中符号的用法,见代码

展开全部

大家都知道Vector以及其他的容器可以不加任何修饰地e68a8462616964757a686964616f31333236373765存储任何类型的对象,这给我们带来了极大的方便,也使得容器很容易被复用,但是大多数时候我们可能需要只能存储某一类型对象的Vector,这是因为我们不希望由于自己失误或其他原因在Vector中添加(add())了不同类型的对象而导致在程序中其它地方的get()发生运行时异常(这是由于不正确的类型转化引发的),请看下面的例子:

//:TestVector.javaimport java.util.Vector;class Dog{ private int number; public Dog(int number){ this.number = number; } public String toString(){ return "This is number #: " + number; }}public class TestVector { public static void main(String[] args) { Vector v = new Vector(); Dog dog; v.add(new Dog(1)); v.add(new Dog(2)); v.add(new Dog(3)); v.add(new Integer(4)); //假设由于我的疏忽,错误地将Integer类型的对象添加进了v中 for(int j = 0; j < v.size(); j++){ dog = (Dog)v.get(j); //想一想,当取到类型为Integer的对象时将引起ClassCastException System.out.println(dog); } }}

注意带有注释的那两行,这种错误在编译时并不会提醒我们,只能在运行时发生ClassCastException,这是(Dog)v.get(j)引起的,更糟糕的是当发生这种错误之后我们很难找到错误的根源在哪里,换句话说就是我们到底在哪里错误地添加了那个非Dog类型的Integer对象,大家运行程序就会明白。尤其是当我们在离那个错误的v.add(new Integer(4))很远的地方(可能是很多层)调用(Dog)v.get(i)时更是如此。此时大家可能会想,如果限制v仅能添加Dog类型的对象,问题不就解决了吗?这的确是个办法,解决如下:

//: DogVector.javaimport java.util.Vector;public class DogVector { private Vector v = new Vector(); public void add(Dog dog){ v.add(dog); } public Dog get(int index){ return (Dog)v.get(index); } public int size(){ return v.size(); }}//:TestDogVector.javapublic class TestDogVector { public static void main(String[] args) { Dog dog; DogVector dv = new DogVector(); //明确地创建了只能存放Dog对象的DogVector dv.add(new Dog(1)); dv.add(new Dog(2)); dv.add(new Dog(3)); // dv.add(new Integer(4)); //此时如果再发生这种疏忽的话,编译将不能通过 for(int i = 0; i < dv.size(); i++){ dog = dv.get(i); //此处也不需要向下转型为Dog System.out.println(dog); } }}

问题得到了解决,但此时大家可能郁闷了,我们在这种情况下是不是要写很多这样乏味的代码?每一类需要存储的对象都得写一个特定的集合类吗?确实在JDK1.5以前这的确是个问题,好在JDK1.5版本中sun引进了泛型--java参数化类型,到此,想必大家已经意识到参数类型化所要解决的问题之一,就像下面这样:

Vector v = new Vector(); E在此处代表我们指定v中只能存放E这种类型的对象,这样将确保我们不会错误地将别的类型的对象添加进去,如果你非要那样做错,编译器也不会允许,并且我们在使用get()方法的时候也不需要向下转型为对象本身的类型E,因为编译器已经为我们完成了,它很清楚地知道v中存储的对象类型就是E,而且get()返回的对象类型就是E而不光是Object。试试下面的例子:

//: TestVector2.javaimport java.util.Vector;public class TestVector2 { public static void main(String[] args) { Vector v = new Vector(); Dog dog; v.add(new Dog(1)); v.add(new Dog(2)); v.add(new Dog(3)); //v.add(new Integer(4)); //此时如果再发生这种疏忽的话,编译将不能通过 for (int j = 0; j < v.size(); j++) { dog = v.get(j); //此处也不需要向下转型为Dog,方法返回类型就是Dog System.out.println(dog); } }}

通过使用参数类型化,还会发生更多的微妙的变化,这里的v.get(j)返回为Dog型只是其中一例,在上例中v的其他一些方法的参数或返回值也将发生变化,有些接收Object参数的方法此时只能接受Dog或其派生类对象,如v.Set(int Index, Dog element),注意如果使用Dog及其派生以外的Object类型的对象做参数时将发生编译期错误,这也正是我们在这种情况下想要的效果,是不是很爽呢?

好了,罗嗦了这么多,其目的就是想让大家从问题的根源来理解概念,如果大家还想对其深入的话,可以找一些专门的资料来看看,想必学过C++的朋友应该对此很容易理解,因为java的参数化类型正是借鉴了C++中模板的概念。(如果你发现此贴中有不准确的地方,望及时指正,以免误人!谢谢!)

本回答由提问者推荐

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在.NET Core中使用Channel(一)

我最近一直在熟悉.net Core中引入的新Channel<T>类型。我想在它第一次发布的时候我了解过它&#xff0c;但是有关文章非常非常少&#xff0c;我不能理解它们与其他队列有什么不同。在使用了一段时间后&#xff0c;我终于看到了它们的吸引力和真正的力量。最值得注意的是大…

java控制系统音量_Java 控制 Windows 系统音量-Go语言中文社区

目录1、使用 Java 来控制 Windows 系统音量&#xff0c;使用 JNA 调用 windows 底层 API 因为有点麻烦&#xff0c;所以这里采用纯 Java API结合 VBS 脚本的方式进行控制。2、可以参考《VBS 控制 Windos 系统音量 及视频播放》&#xff0c;本文同样是利用 VBS 来控制&#xff0…

【Hook】postman工具的代码生成工具让它锦上添花

修改postman工具的代码生成工具加入response自动生成POJO代码如上图可以快速把请求这个动作转成code&#xff0c;减少重复性劳动。但是有一点我觉得可以优化下 就是返回的json如果也能自动转成代码就好了。不然在需要把json序列化成java或者csharp的POJO对象时还得自己coding转…

使用BeetleX.ESDoc构建文档搜索功能

BeetleX.ESDoc组件是基于ElasticSearch服务的文档搜索扩展组件。它在BeetleX.Elasticsearch的基础上包装一些基于文档检索的功能和方法&#xff0c;可以让你在不了解ElasticSearch API的情况下直接存储&#xff0c;删除和搜索相关信息。信息结构BeetleX.ESDoc定义了一个基础的文…

日产汽车源码遭泄露

喜欢就关注我们吧&#xff01;日产北美公司开发和使用的移动应用及内部工具的源代码于近日在网上泄露&#xff0c;原因是该公司错误配置了其中一台 Git 服务器。瑞士软件工程师 Tillie Kottmann 向 ZDNet 透露&#xff0c;此次泄露源于一台配置错误的 Bitbucket Git 服务器的信…

中台的故事结束了?

大家好&#xff0c;我是Z哥。所谓30年河东30年河西&#xff0c;最近阿里开始去中台了。这是不是意味着中台时代的落幕&#xff0c;去中心化时代的开始&#xff1f;谁都说不准。但是我们可以来思考一下这个事情背后释放出了什么样的信号。对我们普通人&#xff0c;特别是互联网行…

java树算法_Java数据结构算法(三)树

本文旨作于收集整理使用&#xff01;&#xff01;导航一、树树(Tree)是n(n≥0)个结点的有限集&#xff0c;n0称之为空树。在非空树种&#xff1a;当有且仅有一个特定的称为根(Root)的结点&#xff1b; 其余结点可以划分为m(m&#xff1e;0)个互不相交的有限集T1、T2 、…、Tm&a…

Blazor VS 传统Web应用程序

原文作者: Christian Findlay原文链接&#xff1a;https://christianfindlay.com/2020/07/09/blazor-vs-traditional-web-apps/Blazor是Microsoft团队开发的单页面应用程序&#xff08;SPA&#xff09;框架&#xff0c;它是与React&#xff0c;Angular和Vue.js有相同之处&#…

如何在 Web Forms 中引入依赖注入机制

依赖注入技术就是将一个对象注入到一个需要它的对象中&#xff0c;同时它也是控制反转的一种实现&#xff0c;显而易见&#xff0c;这样可以实现对象之间的解耦并且更方便测试和维护&#xff0c;依赖注入的原则早已经指出了&#xff0c;应用程序的高层模块不依赖于低层模块&…

python网页动图_python,tensorflow线性回归Django网页显示Gif动态图

1.工程组成2.urls.py"""Django_machine_learning_linear_regression URL ConfigurationThe urlpatterns list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/2.1/topics/http/urls/Examples:Function views1. Add …

asp.net core集成CKEditor实现图片上传功能

背景本文为大家分享了asp.net core 如何集成CKEditor &#xff0c;并实现图片上传功能的具体方法&#xff0c;供大家参考&#xff0c;具体内容如下。准备工作1.visual studio 2019 开发环境2.net core 2.0 及以上版本实现方法1、新建asp.net core web项目2、下载CKEditor这里我…

看了一天小说

在公司呆了一天什么都没干&#xff0c;看了一天小说。都不知道自己啥时候变得这么堕落的&#xff0c;不过还好&#xff0c;至少小说是我喜欢看的那种&#xff0c;很热血的小说。不会有主管看到我的Blog吧&#xff0c; 明天要干点正事了&#xff0c;还是得跟自己说一下&#xff…

Blazor VS React / Angular / Vue.js

原文作者: Christian Findlay原文链接&#xff1a;https://christianfindlay.com/2020/06/04/blazor-vs-react-angular-vue-js/Blazor是一项新的Microsoft技术&#xff0c;允许开发人员使用C&#xff03;为浏览器编写代码, 本文将Blazor与其他三个常见SPA框架进行了比较&#x…

c语言的使用比例远远高于python语言对吗_Python和C语言的语法有什么不同?

随着经济发发展&#xff0c;互联网精英的缺乏越来越严重了&#xff0c;尤其是编程工程师&#xff0c;市场缺乏率极高&#xff0c;所有对于准备即将学习编程朋友&#xff0c;是一个非常的好时机Python和C语言的语法有什么不同&#xff1f;python与C的区别如下&#xff1a;1、语言…

ASP.NET 應用程式的安全性模型

本單元內容 功能 ASP.NET 應用程式依賴於許多不同元素及技術的成功交互操作。每個方案元件都提供安全性功能&#xff0c;以滿足其自身的需求。然而&#xff0c;純粹從個別元件的角度考量安全性還不夠。若要提供整體方案的安全性&#xff0c;您還必須考量元件如何彼此互動。 本單…

.NET开源5年了,这些宝藏你还没get?

从2016年微软发布.NET Core1.0&#xff0c;至今.NET开源也快5年了&#xff0c;GitHub也涌现了很多优秀的开源项目&#xff0c;关于CLR层面调优的讨论也多了起来&#xff0c;尤其是龙芯.NET开源的CLR迁移项目&#xff0c;更是让.NET进入一个全新的时代。鲁迅说过&#xff1a;菜鸟…

C#来创建和读取XML文档 [转]

C&#xff03;来创建和读取XML文档【关键词】&#xff1a;XML 录入&#xff1a;小鱼之家 来源&#xff1a;http://fisher.xundain.com 时间&#xff1a;2005-3-3 23:41:54 点击&#xff1a;85次 扩展标记语言XML&#xff08;eXtensible Markup Language&#xff09;&#xff0…

探索 .NET团队对API的设计流程

原文作者&#xff1a;steve gordon 原文链接: https://www.stevejgordon.co.uk/how-are-dotnet-apis-designed在这篇文章中&#xff0c;我想介绍一些我觉得非常有趣的东西&#xff0c;.NET 团队是如何设计API的&#xff1f;我们先来看下.NET团队面临的有哪些挑战&#xff0c;您…

mybatis mysql usegeneratedkeys_mybatis中useGeneratedKeys用法--插入数据库后获取主键值

前言&#xff1a;今天无意在mapper文件中看到useGeneratedKeys这个词&#xff0c;好奇就查了下&#xff0c;发现能解决我之前插入有外键表数据时&#xff0c;这个外键获取繁琐的问题&#xff0c;于是学习敲DEMO记录在项目中经常需要获取到插入数据的主键来保障后续操作&#xf…

Istio 知多少 | 下一代微服务的守护者

1. 引言在写完eShopOnContainers 知多少[12]&#xff1a;Envoy gateways后&#xff0c;就一直想进一步探索Service Mesh&#xff0c;最近刚在极客时间上学完《Service Mesh入门》&#xff0c;又大致浏览了一遍官方文档&#xff0c;对Istio也算有了基本的认识。下面就根据自己的…