kotlin

【49】kotlin 注解处理器

百般思念 提交于 2020-07-28 15:06:57
配置build.gradle apply plugin:"kotlin-kapt" 将生成的代码添加到SourceSets sourceSets{ main.kotlin.srcDirs=+"build\\generated\\source\\kapt\\main" } 整个build.gradle buildscript { ext.kotlin_version = '1.3.72' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version" } } plugins { id 'java' id 'application' id 'org.jetbrains.kotlin.jvm' version "1.3.72" } apply plugin:"java" apply plugin:"application" apply plugin:"kotlin"

【34】kotlin DSL的概念与自制DSL HTML页面

会有一股神秘感。 提交于 2020-07-28 14:52:47
只在特定领域使用的语言 如 HTML Gradle SQL 特点 计算器变成语言 具有语言的表达能力 有限的表达能力 关注某个特定领域 下面来写一段html DSL 新建文件 Node.kt package com.yzdzy.kotlin.chapter6 interface Node { fun render(): String } 新建Tag.kt package com.yzdzy.kotlin.chapter6 import java.lang.StringBuilder open class Tag(val name: String) : Node { val children = ArrayList<Node>(); val proerties = HashMap<String, String>(); //<html id="htmlId" style=""><head></head><body></body></html> override fun render(): String { return StringBuilder() .append("<") .append(name) .let { stringBuilder -> if (this.proerties.isNotEmpty()) { stringBuilder.append(" ") this

精选火热Github项目推荐:xCrash,Android开发的你一定要用

北城余情 提交于 2020-07-28 12:35:30
xCrash xCrash 能为安卓 APP 提供捕获 java 崩溃,native 崩溃和 ANR 的能力。不需要 root 权限或任何系统权限。 xCrash 能在 App 进程崩溃或 ANR 时,在你指定的目录中生成一个 tombstone 文件(格式与安卓系统的 tombstone 文件类似)。 xCrash 已经在 爱奇艺 的很多安卓 APP(包括爱奇艺视频)中被使用了很多年。 特征 支持 Android 4.0 - 10(API level 14 - 29)。 支持 armeabi,armeabi-v7a,arm64-v8a,x86 和 x86_64。 捕获 java 崩溃,native 崩溃和 ANR。 获取详细的内存使用统计信息。 通过正则表达式设置需要获取哪些线程的信息。 不需要 root 权限或任何系统权限。 架构 捕获 native 崩溃 捕获 ANR 使用 1. 增加依赖 2. 指定一个或多个你需要的 ABI。 3. 初始化 xCrash。 Java Kotlin Tombstone 文件默认将被写入到 Context#getFilesDir() + “/tombstones” 目录。(通常在: /data/data/PACKAGE_NAME/files/tombstones) 在 src/java/xcrash/xcrash_sample 文件夹中

【52】Kotlin android java 工程转换成kt工程

回眸只為那壹抹淺笑 提交于 2020-07-28 10:36:46
然后选择android gradle 选择好 版本号 和配置的model 点击确定后编译器活自动配置 下面是新增的自动配置的东西 build.gradle项目级别 应用级别gradle文件 有一些类本身就是java 想转换成kt可以通过code最下面的一个选项操作 这就方便如果你是android开发工程师 刚刚入门kt 可以看下如何转换过去。 来源: oschina 链接: https://my.oschina.net/u/4346209/blog/4321563

ViewBinding的简单使用

强颜欢笑 提交于 2020-07-28 06:07:49
Android自家的,又可以省去findviewbyid(),而且Butterknife上大神都已经推荐使用的,还有什么理由不去改写呢 build.gradle 开启viewBinding功能 android { ... viewBinding.enabled = true } Activity 绑定 说明一下,这个是kotlin语法的,java语法的写法差不多,只是语法有些差异 private lateinit var mBinding: ActivityEbookBinding //有个坑特别说明一下,这里的ActivityEbookBinding不是什么内部类,而是你的layout对应的databinding类,开始一直以为有什么包没有引入呢。 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) mBinding = ActivityEbookBinding.inflate(layoutInflater) setContentView(mBinding.root) } 调用 mBinding中可以直接根据id找到相应的控件进行操作 mBinding.bookContent.text = "HelloWorld"; 来源: oschina 链接:

paging数据源的二次封装及我目前的认识

瘦欲@ 提交于 2020-07-27 23:15:55
说实话,pagging的数据源定义是在是太繁琐了,所以二次封装了下,没有任何侵入,干净利落,暂时先留存下来,或许在我的生命之中还能用到。。 package com.lk.care.respository import androidx.paging.DataSource import androidx.paging.PageKeyedDataSource import androidx.paging.PagedList import androidx.paging.RxPagedListBuilder import io.reactivex.schedulers.Schedulers /** * @author : william * @createDate : 2020/5/28 * * @description : */ abstract class PagingDataSourceFactory<K, V> : DataSource.Factory<K, V>() { val cacheList = arrayListOf<V>() override fun create() = createDataSource() abstract fun createDataSource(): PageKeyedDataSource<K, V> companion object {

【33】kotlin 偏函数

不羁的心 提交于 2020-07-27 13:08:20
理解偏函数的概念 传入部分参数 得到新函数 仔细体会与Currying的不同 面向场景不同 Currying一串函数调用 了解 偏函数的实现方法 package com.yzdzy.kotlin.chapter5.currying import com.sun.org.apache.xpath.internal.functions.Function2Args import java.io.OutputStream import java.nio.charset.Charset fun log(tag: String, target: OutputStream, message: Any?) { target.write("[$tag] $message\n".toByteArray()) } //fun log(tag: String) = fun(target: OutputStream) = fun(message: Any?) = target.write("[$tag] $message\n".toByteArray()) fun <P1, P2, P3, R> Function3<P1, P2, P3, R>.curried() = fun(p1: P1) = fun(p2: P2) = fun(p3: P3) = this(p1, p2, p3) fun main

【45】kotlin 协程API

烈酒焚心 提交于 2020-07-27 03:13:30
createCoroutine:创建协程 startCoroutine:启动协程 suspendCoroutine:挂起协程 Continuation接口 运行控制类,负责结果和异常的返回 CoroutineContext接口 运行上下文,持有资源,运行调度 ContinuationInterceptor接口 协程控制拦截器 可用来处理协程调度 来源: oschina 链接: https://my.oschina.net/u/4365833/blog/4319981

【47】kotlin 与java的互相调用

回眸只為那壹抹淺笑 提交于 2020-07-26 23:43:05
Get/Set Kotlin自动识别java的Getter/Setter Java操作kt属性通过Getter/Setter 空安全类型 Kotlin 空安全类型的原理 java 中没有 平台类型Platform Type @Nullable 和@NotNull 几类函数的调用 kt:包级函数:静态方法 扩展方法:带Receiver的静态方法 运算符重载:带Receiver的对应名称的静态方法 几个常用注解的使用 @JvmField:将属性编译为java变量 @JvmStatic:将对象的方法编译成Java静态方法 @JvmOverloads:默认参数生成重载方法 @file:JvmName:指定Kotlin文件编译后的类名 NoArg 与AllOpen NoArg为标注的类生成无参构造 -支持 Jpa注解,如@Entity AllOpen为标注的类 去掉final,允许被继承 -支持Spriing注解,如@Component 支持定义注解类型,列入@Poke 泛型 通配符Kotlin的 [*]对应于java的[?] 协变和逆变 out/in -ArrayList<out String> 没有Raw类型 -Java的List->Kotlin 的List<*> 来源: oschina 链接: https://my.oschina.net/u/4365009/blog/4319982

【34】kotlin 统计每个字符串出现的个数 groupBy

家住魔仙堡 提交于 2020-07-26 23:41:39
统计根目build.gradle中字符出现的次数 package com.yzdzy.kotlin.chapter5.example import java.io.File fun main(args: Array<String>) { val map = HashMap<Char, Int>() val res = File("build.gradle").readText().toCharArray().filterNot(Char::isWhitespace) //常用方法 res.forEach { val count = map[it] if (count == null) map[it] = 1 else map[it] = count + 1 } // map.forEach(::println) // 高阶函数 res.groupBy { it }.map { it.key to it.value.size }.forEach(::println) } 来源: oschina 链接: https://my.oschina.net/u/4305397/blog/4317705