您所在的位置:主页 > 新闻资讯 > IT资讯 > Java资讯 >

绍兴java培训机构:不要滥用内部类!

来源:未知

发布时间:2019-08-26

阅读量:

  有学员问到“Java 中引入需要内部类吗?”,这是个好问题,因为这让绍兴java培训机构老师想起来一些学员刚学到内部类时候的“想用的冲动”:导致代码里到处都是层层的内部类套嵌,不但经常搞得静态域错误一堆(内部类不允许有static成员字段),而且过一段时间自己都搞不清当初写的是什么,所以啊不要滥用内部类。

  一个很重要的设计准则是:设计是做减法,能不用模式就不用模式。

  这个准则对内部类来说同样适用。

  所以回答这个问题的基调应该是:能不用内部类就不用内部类。

  以前觉得内部类用来有针对性地暴露外部类的特定接口,比一下子把整个对象都给人家要好。比如说下面代码中的外部类Outer实现了三个接口方法,能跑,能飞,能思考。然后有三个方法getRunner(),getFlyer(),getThinker()有针对性地对外暴露部分功能接口。

  但实际上直接实现三个接口不是就很好嘛。用内部类根本算不上优雅,多了很多代码。仅仅为了暴露接口根本不需要使用内部类。

  再或者说常见的控制框架。我们定义个Event接口,必须有action()方法。在外部类里定义事件处理的流程。然后定义了几个实现Event接口的内部类。

  但这也不是非内部类不可。独立定义A,B类,最后再把Event对象组合到Controller里完全可以,而且更简洁易读。

  另外,说到内部类,经常会提到闭包,回调。但内部类也不是唯一的方案。简单的继承,组合都能实现同等的数据封装效果。

  但Java到底需不需要内部类?答案还是需要的。Java引入内部类的真正意义就在于,还是有很多情况,没有内部类是处理不了的,或者用内部类处理起来更加优雅。

  还是第一个例子。如果外部类不止有一种接口实现方法。如果我实现了Runnable接口,就只能定义一个run()方法。这时候内部类就派用场了。比如,企鹅既会跑,又会游泳。所以它的两个内部类实现两种不同的run()。可以返回两种不同的Runnable引用。

  另一种典型场景就是多继承。如果外部类已经继承了某个基类,比如说企鹅继承自鸟类。但Runnable这时候正好是一个abstract抽象类呢?Java不支持多继承,内部类可以解决这个问题。

  刚才提到了控制框架可以不用内部类。但实际上你看看事件驱动的Swing里到处都是内部类。为什么呢?因为有大量的事件,而且多数事件的相应方法只被用到了一次。用内部类是为了控制类的数量,考虑的是更好地封装。

  内部类另外一个好的特性就是它独立于外部类,不会像组合一样随着外部类的初始化而一起被初始化。而是在我们需要它的时候再创建它。比如说容器里的迭代器,需要我们手动创建。作为可选组件存在于外部类中,不会增加外部类的负担。

  总之,要知道什么时候真正需要内部类,先要搞清楚什么时候可以不用内部类。

  绍兴java培训机构课程简介:

  Java精英班,作为全日制班级,5个月学习,半军事化管理,做到对学员负责。周周有周考,月月有月考。每周周一到周五上课,晚上有晚自习,助教陪同,周六老师带领复习以及考试!每三个月一次课程更新,紧跟企业需求。毕业前期有项目实践,校企合作协议,100+合作企业,企业来校招聘,保证学员顺利毕业!

  报考条件:28岁以下,全日制大专以上学历

  课程优势:名师教导,师资经验可查,小班授课,全程面授,校企合作,费用低于同类机构,性价比高。

  联系方式:18151110983

  招生地址:浙江省绍兴市诸暨市暨阳街道苎萝东路179号广和商业大厦5楼西侧

  提醒大家一句内部类不是大力丸,不要滥用内部类。绍兴java培训机构哪里有?上元教育,塑造IT人才的修炼象牙塔,初学者也能快速上手的技能传授,就等你来!

免责声明:本站所提供资讯均来源于网友提供或网络搜集,由本站编辑整理, 仅供个人研究、交流学习使用,不涉及商业盈利目的。如涉及版权问题, 请联系本站管理员予以更改或删除。

免费预约试听课程

只要一个电话,即可获得免费试听的机会

选课报班:

×

TOP