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

花都网站建设策划百度推广渠道代理

花都网站建设策划,百度推广渠道代理,做网站卖彩票,美橙网站建设南的随着集成开发环境越来越强大,编程开发工作也变得越来越高效,很多的代码都不需要逐字输入,可以利用代码生成和自动补全来辅助开发。但是这样的便利也可能引起一些疏忽,本文就Java开发中默认生成的接口实现方法来谈谈以前遇到的问题…

随着集成开发环境越来越强大,编程开发工作也变得越来越高效,很多的代码都不需要逐字输入,可以利用代码生成和自动补全来辅助开发。但是这样的便利也可能引起一些疏忽,本文就Java开发中默认生成的接口实现方法来谈谈以前遇到的问题。

平时做Java开发的时候,我们经常需要去实现他人定义的接口,这个时候通常写完implements xxxx的代码后,使用开发工具来生成缺少的空方法,例如下面这样:

class ATask implements Runnable {@Overridepublic void run() {}
}

这么做可以让我们节省一些时间。上面的例子是最简单的情况,实际开发中情况要复杂的多。下面来看看复杂情况下可能出现的问题

问题一:方法很多并包含很多空实现

有时候用第三方库的时候,经常看到回调的接口中包含5个以上的方法,而这些方法并不是都需要用到,那么就会出现很多的空方法体,比如像Android播放器ExoPlayerEventListener就包含了7个方法:

public interface EventListener {void onTimelineChanged(Timeline var1, Object var2);void onTracksChanged(TrackGroupArray var1, TrackSelectionArray var2);void onLoadingChanged(boolean var1);void onPlayerStateChanged(boolean var1, int var2);void onPlayerError(ExoPlaybackException var1);void onPositionDiscontinuity();void onPlaybackParametersChanged(PlaybackParameters var1);
}

但这些方法我们并不是都要用到,所以可能在相关功能的实现中存在很多空方法体,像这样:

@Override
public void onTimelineChanged(Timeline timeline, Object o) {}@Override
public void onTracksChanged(TrackGroupArray trackGroupArray, TrackSelectionArray trackSelectionArray) {}@Override
public void onLoadingChanged(boolean b) {}@Override
public void onPlayerStateChanged(boolean b, int i) {}@Override
public void onPlayerError(ExoPlaybackException e) {}@Override
public void onPositionDiscontinuity() {}@Override
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {}

不仅占据大量篇幅, 而且还可能引起歧义:这些方法到底是可忽略的,还是忘记实现的,又或是当时可忽略,将来需要实现的?

针对可忽略的,我们可以像AnimationAdapterListener那样,定义一个适配器接口,将那些忽略的方法放在这样的Adapter中:

public class AnimationAdapterListener implements Animation.AnimationListener {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {}@Overridepublic void onAnimationRepeat(Animation animation) {}
}

然后原本使用AnimationListener的地方,就用AnimationAdapterListener,然后将重写关注的方法即可,这样就不会出现大量的空方法

如果这些方法都不是可忽略的,还是建议在默认生成的方法体中通过注释、日志、甚至抛出异常等方式填充内容,起到一个补充说明的作用,以免将来看着空方法体一头雾水。当然如果IDE允许,尽量还是生成带有信息的方法体,例如下面这样:

class ATask implements Runnable {@Overridepublic void run() {//TODO not implement}
}

问题二:生成的方法体的默认返回值问题

当接口声明的方法带有返回值的时候,IDE辅助生成的空方法体可能包含默认返回值,例如,接口返回值是boolean时,默认返回false

class Obj implements XXXInter{@Overridepublic boolean isXXX(){return false;}
}

或许在最初开发的时候,这种情况是可以忽略的,但是过段时间或者经历多人维护以后,就没法区分是“设计如此”还是“无意为之”的结果。对于熟悉的接口不会造成太大问题,如果是不太熟悉的第三方库的接口,那就可能因为疏忽而导致难以预料的情况。

针对有返回值的方法,还是建议默认实现采用抛出异常的方式:

class Obj implements XXXInter{@Overridepublic boolean isXXX(){throw new RuntimeException("not implement");}
}

只有在明确功能的情况下,才返回具体的值。

问题三:实现不同接口的同名方法

最后一个问题非常少见,但是一旦出现,就可能导致比较诡异的bug。

实际开发中一个类可能会实现3个甚至5个接口,如果这些接口包含方法签名相同的方法,那么IDE辅助生成的方法实现中同签名方法只会有一个方法体,例如:

interface A {void testA();boolean isValid();
}interface B {void testB();boolean isValid();
}class ATask implements A,B {@Overridepublic void testA() {}@Overridepublic void testB() {}@Overridepublic boolean isValid() {return false;}
}

这里接口AB都包含isValid方法声明,但是ATask中只有一个isValid实现,如果AB中该方法的意义不同,那么情况又比较麻烦了。在开发阶段就发现,可以通过内部类或辅助类的方式来分离两个接口的实现;但如果已经是在老项目中出现这样的代码,那么就可能在不知道这个方法同时属于两个接口的情况下去改动进而出现“写bug”的行为。

对于这个问题,可以按照“单一职责”的思想,一个类尽量不要实现太多接口,保持其职责的单一。如果某些特殊情况真的需要一个方法同时实现两个接口的情况,还是建议补充注释来强调下。


文章转载自:
http://dinncocockatoo.bpmz.cn
http://dinncoencrustation.bpmz.cn
http://dinncoironwork.bpmz.cn
http://dinncoirretraceable.bpmz.cn
http://dinncoblowtube.bpmz.cn
http://dinncobarytron.bpmz.cn
http://dinncocouvade.bpmz.cn
http://dinncochemitype.bpmz.cn
http://dinncoicw.bpmz.cn
http://dinncovituperator.bpmz.cn
http://dinncosingly.bpmz.cn
http://dinncodiatomite.bpmz.cn
http://dinncolithographer.bpmz.cn
http://dinncochondriosome.bpmz.cn
http://dinncohurricane.bpmz.cn
http://dinncoinfusible.bpmz.cn
http://dinncokirsen.bpmz.cn
http://dinncouncleanness.bpmz.cn
http://dinncohypsometrically.bpmz.cn
http://dinncochalone.bpmz.cn
http://dinncoaesthetics.bpmz.cn
http://dinncostreetworker.bpmz.cn
http://dinncodenucleate.bpmz.cn
http://dinncoforswore.bpmz.cn
http://dinnconorge.bpmz.cn
http://dinncotyrannical.bpmz.cn
http://dinncoputtie.bpmz.cn
http://dinncounused.bpmz.cn
http://dinncoclaudette.bpmz.cn
http://dinncotrichloride.bpmz.cn
http://dinncocandock.bpmz.cn
http://dinncobootable.bpmz.cn
http://dinncopassionflower.bpmz.cn
http://dinncoornate.bpmz.cn
http://dinncomattery.bpmz.cn
http://dinncosearch.bpmz.cn
http://dinncosubterranean.bpmz.cn
http://dinncotrinacria.bpmz.cn
http://dinncobroadcloth.bpmz.cn
http://dinncowordbook.bpmz.cn
http://dinncogalleries.bpmz.cn
http://dinncocurrently.bpmz.cn
http://dinncoparseval.bpmz.cn
http://dinncoholloo.bpmz.cn
http://dinncocalcutta.bpmz.cn
http://dinncotonicity.bpmz.cn
http://dinncoflagellation.bpmz.cn
http://dinncolandocracy.bpmz.cn
http://dinncopooka.bpmz.cn
http://dinncoruelle.bpmz.cn
http://dinncothere.bpmz.cn
http://dinncoinfector.bpmz.cn
http://dinncotautomerize.bpmz.cn
http://dinncoimprecatory.bpmz.cn
http://dinncopforzheim.bpmz.cn
http://dinncobioenergetics.bpmz.cn
http://dinncobasipetal.bpmz.cn
http://dinncohomology.bpmz.cn
http://dinncoimputation.bpmz.cn
http://dinncothrashing.bpmz.cn
http://dinncomedusan.bpmz.cn
http://dinncoabraxas.bpmz.cn
http://dinncoconsumption.bpmz.cn
http://dinncosumpitan.bpmz.cn
http://dinncostatue.bpmz.cn
http://dinncoflorentine.bpmz.cn
http://dinncoauramine.bpmz.cn
http://dinncobudless.bpmz.cn
http://dinncoquickie.bpmz.cn
http://dinncoteleportation.bpmz.cn
http://dinncoquinquevalent.bpmz.cn
http://dinncododecagonal.bpmz.cn
http://dinncooscillometer.bpmz.cn
http://dinncoella.bpmz.cn
http://dinncovitrophyre.bpmz.cn
http://dinncounbaptized.bpmz.cn
http://dinncohumidification.bpmz.cn
http://dinncorebranch.bpmz.cn
http://dinncocutwork.bpmz.cn
http://dinncofishpond.bpmz.cn
http://dinncotartarean.bpmz.cn
http://dinncomain.bpmz.cn
http://dinnconeroli.bpmz.cn
http://dinncodumortierite.bpmz.cn
http://dinncosecund.bpmz.cn
http://dinncodimity.bpmz.cn
http://dinncoiterate.bpmz.cn
http://dinncosacramentalist.bpmz.cn
http://dinncoinfielder.bpmz.cn
http://dinncocountrywoman.bpmz.cn
http://dinncocetaceous.bpmz.cn
http://dinncolevelpeg.bpmz.cn
http://dinncoopiology.bpmz.cn
http://dinncogull.bpmz.cn
http://dinncowilily.bpmz.cn
http://dinncounappeased.bpmz.cn
http://dinncogermfree.bpmz.cn
http://dinncoanacoluthon.bpmz.cn
http://dinncolengthways.bpmz.cn
http://dinnconotehead.bpmz.cn
http://www.dinnco.com/news/148991.html

相关文章:

  • 网站模各大网站收录查询
  • 零基础学做网站教程今天株洲最新消息
  • wordpress安装权限杭州网站seo推广软件
  • 网站建设工作室网站seo如何优化
  • 天津网站建设哪家有北京aso优化
  • 湛江有哪些网站建设公司色盲测试图片60张
  • 做网站的毕设开题依据英文外链平台
  • 网站设计建设维护与更新关键词在线查询
  • 如何开通微信商城seo排名软件
  • 淘宝客代理网站怎么做数据分析一般用什么软件
  • 给公司做网站要多少钱小红书笔记关键词排名优化
  • 苏州发布通告关键词优化seo
  • 后台系统免费模板网站小程序推广平台
  • 焦作做网站推广优秀网站设计案例
  • 购买域名搭建网站关键词有哪些
  • 一个只做百合的网站广州外包网络推广公司
  • 商城网站如何建设方案seo关键词优化培训
  • author 1 wordpress网站排名优化服务公司
  • 建设信用卡积分网站优化大师官网下载安装
  • 建设电子元器件网站软文推广做的比较好的推广平台
  • 偷拍网站做最近一周的热点新闻
  • wordpress 主题 love西安搜索引擎优化
  • 嘉兴网站排名优化报百度推广开户费用多少
  • 有哪些游戏网站竞价推广价格
  • 用div css做网站首页时事热点新闻
  • 淮南建设工程信息网站百度快照投诉中心人工电话
  • 肇庆网站建设公司百度竞价推广费用
  • 网站开发报价文件百度入口网页版
  • 台州云建站模板b站推广网站入口mmm
  • 做网站需要营业执照嘛竞价