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

大型网站css化妆品推广软文

大型网站css,化妆品推广软文,深圳罗湖企业网站,做动漫网站要多少钱1. 日常遇到的冗余的接口方法实现 日常开发中,经常会要实现接口,但是很多场景中,只需要用到其中一两个方法,例如 ActivityLifecycleCallbacks,它有很多个接口需要实现,但是很多时候我们只需要用到其中的一…
1. 日常遇到的冗余的接口方法实现

日常开发中,经常会要实现接口,但是很多场景中,只需要用到其中一两个方法,例如 ActivityLifecycleCallbacks,它有很多个接口需要实现,但是很多时候我们只需要用到其中的一两个

    val myActivityLifecycleCallbacks = object : Application.ActivityLifecycleCallbacks  {/*** 例如我们只需要监听 Activity 的创建和销毁,那么 onActivityStarted, onActivityResumed, onActivityPaused* onActivityStopped,onActivityStopped,onActivitySaveInstanceState 这 6 个方法是完全没必要是做实现的,* 即使是空实现*/override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {TODO("Not yet implemented")}override fun onActivityStarted(activity: Activity) {TODO("Not yet implemented")}override fun onActivityResumed(activity: Activity) {TODO("Not yet implemented")}override fun onActivityPaused(activity: Activity) {TODO("Not yet implemented")}override fun onActivityStopped(activity: Activity) {TODO("Not yet implemented")}override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {TODO("Not yet implemented")}override fun onActivityDestroyed(activity: Activity) {TODO("Not yet implemented")}}

如果有多个不同业务需要实现这个接口,就这样很容易产生代码冗余。有没有一种优雅的方式,只需要实现自己需要的方法而不再需要去关注其他方法?有的,那就是利用 Java 的动态代理和 kotlin 的委托模式

2. 利用 Java 的动态代理和 Kotlin 的委托模式

首先需要实现一个通用的动态代理,新建一个 Kotlin 文件 DelegateObject.kt,这里通过 inlinereified 关键字,获取到泛型的 class 信息

import java.lang.reflect.InvocationHandler
import java.lang.reflect.Proxyinline fun <reified T> noOpDelegate() : T {val javaClass = T::class.javareturn Proxy.newProxyInstance(javaClass.classLoader, arrayOf(javaClass), no_op_invocationHandler) as T
}val no_op_invocationHandler = InvocationHandler { _, _, _ -> }

这样就可以获取到任意一个接口的一个对象,只是没有具体的实现。接着再利用 Kotlin 的 by 关键字实现对象委托

    val myActivityLifecycleCallbacks = object : Application.ActivityLifecycleCallbacks by noOpDelegate() {}

由于 Kotlin 委托模式的原理,实际上在编译期间也是会生成 ActivityLifecycleCallbacks 的所有方法,先来看看转译后的实现

   private final Application.ActivityLifecycleCallbacks myActivityLifecycleCallbacks = (Application.ActivityLifecycleCallbacks)(new Application.ActivityLifecycleCallbacks() {// $FF: synthetic fieldprivate final Application.ActivityLifecycleCallbacks $$delegate_0;{int $i$f$noOpDelegate = false;Class javaClass$iv = Application.ActivityLifecycleCallbacks.class;Object var10001 = Proxy.newProxyInstance(javaClass$iv.getClassLoader(), new Class[]{javaClass$iv}, DelegateObjectKt.getNo_op_invocationHandler());if (var10001 == null) {throw new NullPointerException("null cannot be cast to non-null type android.app.Application.ActivityLifecycleCallbacks");} else {this.$$delegate_0 = (Application.ActivityLifecycleCallbacks)var10001;}}public void onActivityCreated(@NonNull @NotNull Activity activity, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {Intrinsics.checkNotNullParameter(activity, "activity");this.$$delegate_0.onActivityCreated(activity, savedInstanceState);}public void onActivityDestroyed(@NonNull @NotNull Activity activity) {Intrinsics.checkNotNullParameter(activity, "activity");this.$$delegate_0.onActivityDestroyed(activity);}public void onActivityPaused(@NonNull @NotNull Activity activity) {Intrinsics.checkNotNullParameter(activity, "activity");this.$$delegate_0.onActivityPaused(activity);}public void onActivityResumed(@NonNull @NotNull Activity activity) {Intrinsics.checkNotNullParameter(activity, "activity");this.$$delegate_0.onActivityResumed(activity);}public void onActivitySaveInstanceState(@NonNull @NotNull Activity activity, @NonNull @NotNull Bundle outState) {Intrinsics.checkNotNullParameter(activity, "activity");Intrinsics.checkNotNullParameter(outState, "outState");this.$$delegate_0.onActivitySaveInstanceState(activity, outState);}public void onActivityStarted(@NonNull @NotNull Activity activity) {Intrinsics.checkNotNullParameter(activity, "activity");this.$$delegate_0.onActivityStarted(activity);}public void onActivityStopped(@NonNull @NotNull Activity activity) {Intrinsics.checkNotNullParameter(activity, "activity");this.$$delegate_0.onActivityStopped(activity);}});

现在已经将 ActivityLifecycleCallbacks 的匿名内部类对象委托给了 noOpDelegate 生成的代理对象。这样需要用到具体哪个方法时,只需要再次重写即可,例如文章最开始的例子可以变为

    val myActivityLifecycleCallbacks = object : Application.ActivityLifecycleCallbacks by noOpDelegate() {override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {TODO("Not yet implemented")}override fun onActivityDestroyed(activity: Activity) {TODO("Not yet implemented")}}

经过精简的代码可以使代码更加简洁,可以更好的聚焦业务实现

http://www.15wanjia.com/news/26281.html

相关文章:

  • 兰溪优秀高端网站设计地址今日热点新闻素材
  • 西安网页设计培训班价格郑州见效果付费优化公司
  • 给一瓶水做网站网站推广线上推广
  • 沈阳网站哪家公司做的好合肥百度推广排名优化
  • 创意网络广告网站整体优化
  • 做室内设计的网站有哪些方面长春网站建设技术支持
  • 济南手机网站建设公司排名一般的电脑培训班要多少钱
  • 帮做网站的网络营销推广
  • 小语种网站建设要点网站百度收录查询
  • 怎么可以自己做网站新闻联播俄罗斯与乌克兰
  • 网站建设要咨询哪些内容网站优化排名怎么做
  • wordpress如何添加icp如何提高网站seo排名
  • 互联网公司运营seo一个月工资一般多少
  • 河北远策网站建设舆情网站直接打开怎么弄
  • 网站开发z亿玛酷1负责销售
  • 长沙大型网络网站制作公司适合30岁短期培训班
  • 做外贸英语要什么网站查网站排名
  • wordpress资源类主题搜索引擎优化的方式有哪些
  • 音乐网站建设目标龙岗seo网络推广
  • 贵州省住房和城乡建设厅官网站自学seo大概需要多久
  • 2017网站建设上海网络推广外包
  • 副业做网站软件各大网站
  • vultr怎么建设影视网站微信朋友圈推广平台
  • 区块链app定制开发优势的seo网站优化排名
  • 南宁建网站公司就去云尚网络百度竞价返点一般多少
  • 常州微元宝网站建设建一个app平台的费用多少
  • 英文网站制作公司哪家好公司网站建设步骤
  • 橙子建站是诈骗平台吗常用的网络营销方法
  • 做网站计划谷歌排名推广公司
  • 制作电子商务网站页面上海aso优化公司