三、使用 @JvmStatic 注解声明静态成员 1、Java 正常访问 Kotlin 伴生对象成员 2、Java 以静态方式访问 Kotlin 伴生对象成员 一、使用 @JvmField 注解暴露...调用相应的 Getter 和 Setter 方法 , 才能进行访问 ; 代码示例 : Kotlin 类 : 在 Kotlin 中声明的成员属性 , 默认就是 private 私有属性 , 默认为其生成了...---- 在 Kotlin 中 , 没有静态成员概念 , 需要声明静态成员时 , 一般都在其 Companion 伴生对象中声明 ; 在 Java 中 调用 Kotlin 的 Companion 伴生对象...中的成员时 , 需要通过如下形式进行调用 : Kotlin类.Companion.成员属性 Kotlin类.Companion.成员函数 如果想要 在不使用 Companion 的前提下 直接调用 Kotlin...中的 Companion 伴生对象 成员 , 可以 在 companion object 中 , 使用 @JvmStatic 注解 将伴生对象中的成员 声明 为 Java 静态成员 , Java 中可以按照静态成员的方式进行访问
抽象类声明 III . 抽象类中的 ( 正常 / 抽象 ) 的 ( 成员 / 方法 ) IV . 抽象类继承 V . 抽象方法的覆盖 VI . 抽象方法的实现 I ....抽象类总结 ---- 抽象类总结 : ① 声明 : 抽象类中使用 abstract 声明 ; ② 成员 : 抽象类中既可以定义正常属性和方法 , 又可以定义抽象的属性和方法 ; ③ 继承 : 抽象类可以继承抽象类...抽象类声明 ---- 1 ....抽象类中的 ( 正常 / 抽象 ) 的 ( 成员 / 方法 ) ---- 0 . 抽象类内成员总结 : 抽象类中可以定义正常的成员和方法 , 也可以定义抽象的成员和方法 ; 1 ....定义正常的属性和方法 : 抽象类中可以定义正常的 成员属性 和 成员方法 ; ① 正常成员属性 : 该成员属性可以是常量 , 也可以是变量 ; ② 正常成员方法 : 正常的方法 , 定义有方法体 ; 如果函数有方法体
, 即声明扩展函数和调用扩展函数的类型后面都必须有 ?...扩展函数声明格式 : 扩展函数在函数前多了接收者类型 , 函数体中可以使用 this 调用 接收者类型对象中的成员 ; fun 接收者类型.扩展函数名 ( 扩展函数参数列表 ) { //扩展函数函数体..., 接收者类型被声明成基类类型 , 调用的扩展函数就是基类的扩展函数 ; ③ 接收者类型派生类 : 如果 接收者类型 声明为派生类 , 那么就会调用派生类的扩展函数 ; 3 ....变量声明为父类类型 , 赋值子类对象 //接收者类型声明为 Student , 但实际对象是 MaleStudent 类型的 // 此时扩展函数调用 Student 接收类型 的扩展函数...空值处理的两种类型 : ① 非空类型 : 这是 Kotlin 的默认类型 , 如 Student 类型是非空类型 , 不能被赋值为 null ; ② 可空类型 : 在类型名称后使用 ?
---- 目录 1、如何声明依赖版本?...如何声明依赖版本?...首先,我们先盘点出 Gradle 构建系统中声明依赖版本的方式: 1.1 静态版本与不稳定版本 在 Gradle 构建声明依赖的语法想必各位都了然于胸了: build.gradle dependencies...如果不存在满足约束规则的依赖项版本,则会抛出构建失败错误。...如果不存在满足约束规则的依赖项版本,则会抛出构建失败错误; 3、虽然 Gradle 在平台层提供了一套依赖解析决议机制,但 Gradle 版本决议的默认规则是选择的最高版本,最高版本不一定与项目兼容,所以需要开发者使用相关版本决议规则
) 使用 Data Mapper 分离数据源 和 UI Kotlin Flow 结合 Retrofit2 + Room 的混合使用 Kotlin Flow 与 LiveData 的使用 使用 Coil...Kotlin Flow 如何与 Retrofit2 + Room 混合使用?...Kotlin Flow 在 Repositories 中的使用 如果我们想在 Flow 中使用 Retrofit 或者 Room 进行网络请求或者查询数据库的操作,我们需要将使用 suspend 修饰符的操作放到...Kotlin Flow 在 ViewModel 中的使用 在 ViewModel 中使用 Flow 之前在 Jetpack 成员 Paging3 实践以及源码分析(一) 文章也有提到, 这里我们在深入分析一下... 这是获取神奇宝贝的详细信息,通过 DataBinding 以声明方式将数据(神奇宝贝的体重)绑定到界面上,更多使用参考项目中的代码。
RxKotlin RxKotlin是基于kotlin扩展的rx衍生体,对kotlin无需再普及,这种支持Lambdas语法的简洁姿势,会让代码变得小清新和灵活。可能你已经在java8上体验了一番。...开发者可以用Kotlin将Rxjava变得更加简单,接下来用2.x 先睹为快!...data class 是用来声明一个class的,好比c中def,js中var申明变量对象一样。 SearchService :用过retrofit的也很明白,定义的一个抽象API接口。...通过这个简单的栗子,发现不管用rxJava, 还是只用retrofit, 通过使用rxkotlin将业务流程变得更加清晰,那么kotlin是否也有他的操作符,当然他也有过滤器,转换器,拆分符和rxjava...写在最后 Rx家族目前最为熟知的是rxjava和rxSwift,前两者在移动平台上开发也不再是什么新鲜事了,那么其他的家族成员是否也会受到大家的热宠呢,让我们拭目以待!
管理Gradle依赖的三种不同方法: 手动管理 使用Google推荐的“ext” Kotlin + buildSrc 1、手动管理 这是一种大多数人在采用的管理依赖的方法,但每次升级依赖库时都需要做大量的手动更改...Kotlin + buildSrc == Android Studio Autocomplete 您需要在您的项目里创建一个buildSrc模块,然后编写kotlin代码来管理依赖库,使得IDE支持自动补全...: plugins { `kotlin-dsl` } buildSrc/src/main/java/Dependencies.kt object Versions { val support_lib... Libs.retrofit_rxjava_adapter implementation Libs.rxjava 结束语 我强烈推荐您使用“Kotlin + buildSrc”的方法。...buildSrc的Android Library,试了好几遍都提示“Gradle sync failed: Plugin with id 'com.android.library' not found”的错误
而接入者的项目原可能已经依赖了这些库,一旦再接入了你的,就会导致错误,提示 duplicated class was found。 这种做法与 Gradle 的依赖管理机制完全是背道而驰的。...了,这个时候我应该在 library 的 build.gradle 里这样写: compileOnly "com.squareup.retrofit2:retrofit:2.4.0" compileOnly...:retrofit:$versions.retrofit" 这样做的好处是,如果引用者的项目本来就已经依赖了 Retrofit,那么皆大欢喜,什么都不用加,并且上面的 $versions.retrofit...意味着引用者可以自己决定他要用哪个版本的 Retrofit,一般来讲只要大于等于你编译库时用的版本都不会有太大问题,除非 Retrofit 自己大量修改了 API 导致编不过的那种。...,请检查参数" ... } } 这样一写,你的调用者只要点点鼠标,进来看一下你这个类,就能迅速把错误码跟错误提示对应上。
你需要同时告诉他这个库工程依赖的其他aar 和远程 jar包(因为他们没有打包到 aar 中) 4) 如果通过工程依赖(即compile project(‘:lib’)的方式), 依赖是可以传递的,所以不需要在声明一次依赖...'lib/arm64-v8a/libgnustl_shared.so' pickFirst 'lib/armeabi-v7a/libgnustl_shared.so' } 遇到这种错误可以通过上面方法尝试解决..." : "com.squareup.retrofit2:retrofit:${version["retrofitVersion"]}", "converter-gson"...butterknifeVersion"]}", //multidex "multidex" : "com.android.support:multidex:1.0.3", //kotlin..."kotlin-stdlib" : "org.jetbrains.kotlin:kotlin-stdlib:1.2.10", //ui test "espresso-core"
人生自古哪儿没坑 作为一个用了两年 Kotlin 的人,最近越来越控制不住自己,于是乎各种 Java 代码都开始变成 Kt,于是,也就发现了更多好玩的东东~ 话说呀,有个叫做 Retrofit 的框架,...让某一个类继承 AtomicInteger 来存储一个线程安全的状态值,如果大家有兴趣的话,可以去看下这个类:CallArbiter.java (https://github.com/square/retrofit.../blob/master/retrofit-adapters/rxjava/src/main/java/retrofit2/adapter/rxjava/CallArbiter.java) 而我呢,最近在闲暇时间仿照...: AtomicInteger{ //错误!...这错误报的虽然是说没有实现 toByte 方法,可仔细观察一下就会发现,没实现的方法居然还有 toShort 和 toChar。。 2.
:$kotlin_version" 2、Demo说明 该项目使用MVP模式,里面用到了Retrofit2+RxJava2,然后使用了聚合的万年历接口,Demo非常简单便于初学者快速掌握。...4、Retrofit+RxJava Retrofit结合RxJava能快捷的使用网络请求。...,一般会将常量统一写到一个类里面,然后设置静态变量,由于在Kotlin中不存在静态变量,所有就有对象声明的存在,对象声明比较常用的地方就是在这里,对象声明用Objcet关键字表示。...,藉由这个来帮助你快速找到通用 Java 操作符、功能以及声明的 Kotlin 替代方案。...v=ZlQhmkp_jyk 一个 8 分钟的浓缩教程,让你快速了解 Kotlin 的主要功能,如变量声明、Lambdas、扩展功能等等。
前面我们使用Java来运用JetPack中的一系列组件,又使用kotlin运用这些组件实现了一系列功能: kotlin--Flow文件下载 kotlin--Flow结合Room运用 kotlin--Flow...结合retrofit运用 kotlin--StateFlow运用 kotlin--SharedFlow运用 接着,Jetpack的Paging3中,我们使用的语言是kotlin,相信通过这些项目的对比,...你就能发现koltin取代Java的理由了,kotlin拥有更好的扩展性,更高的性能,更简洁的代码,更好的Jetpack组件支持,如果你还对kotlin不熟悉,那么可以查阅我的kotlin专题博客,在此也要感谢动脑学院...上拉刷新、重试按钮、错误信息布局文件如下: <?...endOfPaginationReached = false) } 此时AppHelper的init函数还没有调用 4.App Starup image.png App Starup是JetPack的新成员
implementation 'com.squareup.retrofit2:retrofit:2.9.0' //retrofit moshi implementation "...二、网络请求 当我们使用Kotlin时,网络访问就变得更简单了,只需要Retrofit和协程即可,首先我们在com.llw.mvidemo包下新建一个data包,然后在data包下新建一个model...Retrofit一开始是支持Gson转换的,后面增加了MoShi的转换,Moshi拥有出色的Kotlin支持以及编译时代码生成功能,可以使应用程序更快更小。...作为网络接口请求的地址头,然后构建了MoShi,通过MoShi去进行JSON转Kotlin数据类的处理,之后就是构建Retrofit,将MoShi设置进去,最后就是通过Retrofit创建一个网络请求服务...mainViewModel.mainIntentChannel.send(MainIntent.GetWallpaper) } } } } 说明一下,首先声明变量并在
协程 看这一篇就够了 Kotlin Flow 看这一篇 带你入门~ 项目示例 在官方文档中也给出了我们Paging在架构中的使用图 ?...: Retrofit = Retrofit.Builder() .baseUrl(BASEAPI) .client(okHttpClient)...(mClass) as T } } 和 DataApi接口,这里我们将方法声明为挂起函数,便于在协程中调用 interface DataApi { /** * 获取数据...LoadState的值有三种,分别是NotLoading:当没有加载动作并且没有错误的时候 Loading和Error顾名思义即对应为正在加载 和加载错误的时候,监听方式除了addLoadStateListener...dataBindingUtil.root) { var binding = dataBindingUtil } } 为了便于演示我们这里在数据列表中新增了一个更新数据的按钮,在Activity中声明
首先我声明一点,RxHttp的出现,并不是要干掉谁,而是给大家多一个选择,多一个不一样的选择。...稳定性 我一直认为Retrofit,是当下综合得分最高的选手,RxHttp也很优秀,但得分比Retrofit低那么一丢丢,那这一丢丢差在哪里呢?...,再有就是多个注解非法在一起使用时,只有在编译期间才能给我们明确的错误,这也是我刚上手Retrofit比较头疼的一点。...综上所述 RxHttp易用性远胜Retrofit,但稳定性不如Retrofit,功能上都能实现,算打个平手。...而且对于UI来说,只需要data字段即可,错误提示啥的我管不着。 那有没有什么办法,能直接拿到data字段,并且对code做出统一判断呢?
: Retrofit = Retrofit.Builder() .baseUrl(BASEAPI) .client(okHttpClient)...(mClass) as T } } 和 DataApi接口,这里我们将方法声明为挂起函数,便于在协程中调用 interface DataApi { /** * 获取数据...LoadState的值有三种,分别是NotLoading:当没有加载动作并且没有错误的时候 Loading和Error顾名思义即对应为正在加载 和加载错误的时候,监听方式除了addLoadStateListener...我们也需要在Error状态下监听具体的错误,无网络的话就显示无网络UI 服务器异常的话 就提示服务器异常,代码如下所示: is LoadState.Error -> { Log.d(TAG,...dataBindingUtil.root) { var binding = dataBindingUtil } } 为了便于演示我们这里在数据列表中新增了一个更新数据的按钮,在Activity中声明
就命名GoodNews吧,开发语言就是Kotlin,我这里用的是当前最新版本的AS,点击Finish完成项目创建。...之前用Java写网络框架时是通过Okhttp、Retrofit、rxJava、那么在Kotlin中就使用Retrofit和协程来操作,在app的build.gradle的dependencies{}闭包中添加如下代码...: //Retrofit implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2...这里我们就拿到了返回的数据,通过返回的数据去构建Kotlin的Data类。...这里简化了Retrofit回调的写法,这里定义了一个await()函数,它是一个挂起函数,我们给它声明了一个泛型T,并将await()函数定义成了Call的扩展函数,这样所有返回值是Call类型的
前言 Kotlin协程是什么,如何使用?如何结合Retrofit使用?Kotlin协程的优势在哪里?相信看完这一篇你一定有所收获!...1、协程可以帮我们自动切线程 2、摆脱了链式回调的问题 Retrofit 如何使用协程 从Retrofit2.6.0开始,retrofit就自动支持协程了,这里我们从「聚合数据」上找到一个开放api 我们先来看之前我们怎么使用的...BaseReqData>, t: Throwable) { tvName.text = t.toString() Log.d("网络请求错误...首先我们在ApiService中新增一个函数 ,声明为挂起函数,类型不需要添加Call @GET("toutiao/index") suspend fun queryDataKotlin(@Query(...最后的最后,协程的强大远远不止上述 在项目中使用Jetpack 对kotlin的扩展,可以更加便捷的创建和使用协程.
,例如 List 中的 T,Comparable 中的 Int 等 variance modifiers 型变修饰符 in 和 out - 子类泛型 标准翻译应为:类型参数为子类的泛型,...为了描述方便,此处简称为「子类泛型」 - 父类泛型 标准翻译应为:类型参数为父类的泛型,为了描述方便,此处简称为「父类泛型」 function type 函数类型 形如:(T)-> U 译者注:本篇专有名字比较多...(声明时使用了 out 修饰符),而 MutableList 则是不型变的。...中的 List,在 Kotlin 中, List 只提供了可读方法,因此 List 在声明处定义成了协变(使用 out) 对应的,逆变的类型参数如果放在公有的输出位置,也会存在问题: open...译者注: 在 Java 中只有使用处型变 总结 Kotlin 有强大的泛型类型,并且支持使用声明处型变以及使用处型变 默认的类型参数是不型变的 out 修饰符可以使类型参数协变 in 修饰符可以使类型参数逆变
variance modifiers 型变修饰符 in 和 out 子类泛型 标准翻译应为...:类型参数为子类的泛型,为了描述方便,此处简称为「子类泛型」 父类泛型 标准翻译应为:类型参数为父类的泛型,为了描述方便,此处简称为「父类泛型」 function type...Kotlin 中唯一一个支持型变的类型,还有一个更加常见的支持协变的类型就是 List(声明时使用了 out 修饰符),而 MutableList 则是不型变的。...中的 List,在 Kotlin 中, List 只提供了可读方法,因此 List 在声明处定义成了协变(使用 out) 对应的,逆变的类型参数如果放在公有的输出位置,也会存在问题: open...译者注: 在 Java 中只有使用处型变 总结 Kotlin 有强大的泛型类型,并且支持使用声明处型变以及使用处型变 默认的类型参数是不型变的 out 修饰符可以使类型参数协变 in 修饰符可以使类型参数逆变
领取专属 10元无门槛券
手把手带您无忧上云