安卓 KOTLIN - 技术教程文章

使用Kotlin属性访问语法来设置Java字段是否安全【代码】

这是一个假设的问题.情况如下:我从Kotlin文件调用Java类的setter来更改私有字段x的值javaFoo.setX(420)IDE建议将其更改为javaFoo.x = 420它正常工作. 现在假设setter里面有一些复杂的功能,后来在Java类中的x字段被改为public而不是private.没有编译错误,但Kotlin调用将改变x跳过setter中发生的其他东西的值,并且它可能会被忽视而导致逻辑错误.因此我想知道:使用Kotlin属性访问语法来设置java字段是否安全?解决方法:您对语言语义...

java – 在将vararg参数传递给Kotlin中的另一个函数时编译时间错误【代码】

我试图接受一个vararg参数作为Kotlin中的函数参数,并尝试将其传递给另一个带有vararg参数的函数.但是,这样做会给我一个编译时错误,类型不匹配:推断类型是IntArray但Int是预期的. 科特林:fun a(vararg a: Int){b(a) // type mismatch inferred type is IntArray but Int was expected }fun b(vararg b: Int){}但是,如果我在Java中尝试相同的代码,它的工作原理. Java的:void a(int... a) {b(a); // works completely fine }void b...

如何实现java.util.function.Predicate作为Kotlin lambda?【代码】

我需要将java.util.function.Predicate传递给Java函数.如何在Kotlin中将其实现为Lambda? 我需要调用的Java函数:public void foo(Predicate<String> p)Java Lambda实现?:foo(text-> true)Kotlin Lambda实施?:foo{text:String -> true} ^^^^^^^^^^^^ Type mismatch. Required: Predicate<String> Found: (String) → BooleanKotlin-Version 1.2.21解决方法:这些变体适合我:foo(Predicate {text -> true }) foo(Predicat...

java – DDD:如何从Kotlin中的集成层隐藏特定的聚合根构造函数【代码】

我对DDD有点新意,甚至在阅读了蓝色和红色书后,我仍然有一些关于如何将一些原则转换为代码的问题,特别是使用Kotlin和Java. 例如,我标识了一个客户端聚合根,它接收一些参数需要它来创建,如名称和地址:class Client: AggregateRoot {var clientId: ClienteIdvar name: Namevar address: Addressconstructor(name: Name,address: Address) : super(){// validations ....this.name = namethis.address = address}简单部分:要创建一个...

java – 仅限Consumer的kotlin泛型【代码】

让我们说这个java示例:interface Sink<T> {void accumulate(T t); }public static <T> void drainToSink(Collection<T> collection, Sink<? super T> sink) {collection.forEach(sink::accumulate); }注意第二个参数是如何声明的?超级T.我需要这个,因为我想调用这样的方法:Sink<Object> sink = .... // some Sink implementation Collection<String> strings = List.of("abc"); drainToSink(strings, sink);现在我想用kotlin(我...

揭秘 Kotlin 编程原理【图】

链接: https://pan.baidu.com/s/1dldhw_fY3mwaO5Wj6DeaXw 提取码: wt9k目录 1 快速入门 1 1.1 简介 1 1.2 编写第一个Hello World程序 3 1.3 程序结构 10 1.3.1 Kotlin源码结构 10 1.3.2 包声明与导入 11 1.3.3 后缀名 14 1.4 Kotlin标准库 14 2 基本语法 19 2.1 基本类型 19 2.1.1 数字 20 2.1.2 字符串 23 2.2 变量与常量 24 2.2.1 常量 24 2.2.2 属性包装 25 2.3 函数 30 2.3.1 函数声明 30 2.3.2 闭包 35 2.3.3 lambda表达式 40...

Java to Kotlin泛型翻译【代码】

我想搬到Kotlin旧的Java项目,并发现有趣,无法将此转化为Kotlin而没有痛苦public interface BaseJView<P extends BaseJPresenter> {P createPresenter(); } public interface BaseJPresenter<V extends BaseJView> {void bindView(V view); }你能给出建议吗,我怎么能做到这一点?解决方法:一种方法是像这样使用recursive type definition:interface BaseJView<TSelf : BaseJView<TSelf, P>, P : BaseJPresenter<P, TSelf>> {fun cr...

Java方法错误地在kotlin中自动重载【代码】

给定一个包含以下(精简)类的Java库:public class Vector2f {public float x;public float y;public Vector2f div(Vector2f other) {x /= other.x;y /= other.y;return this;}public Vector2f div(Vector2f other, Vector2f dest) {dest.x = x / other.x;dest.y = y / other.y;return dest;}/* ... */ }由于kotlin自动将合适的方法名称转换为重载运算符,我可以写val v0 = Vector2f(12f, 12f) val v1 = Vector2f(2f, 2f)val res = v...

java – Kotlin:appendText和关闭资源【代码】

我是Kotlin的新手,但我有很强的Java背景(Java是我的日常工作).我很喜欢Kotlin的一些快捷功能.其中一个重要的是File.appendText(). IMO非常方便. 我的问题是关闭资源.如果我要使用作家,我会做这样的事情:out8.writer().use { ... }但我没有直接在appendText方法上看到任何指示关闭资源的东西. Kotlin是否在幕后为我处理这个问题,还是我不得不以另一种方式担心这个问题? 谢谢.解决方法:您可以在IDE中跳转到appendText的实现以查找(...

java – Spock与Mockito测试Kotlin课程【代码】

我有一些用Spock编写的测试,它涵盖了我的Java代码.现在我迁移到Kotlin,问题是我无法模拟最终类,所以我决定使用这里描述的Mockito插件:https://github.com/mockito/mockito/wiki/What%27s-new-in-Mockito-2#unmockable 问题是我需要更换每个’_”>>’与Mockitos的any(),anyString(),when(),then()等?我试图用Mockito模拟最后的课程,但似乎不行. 如果我必须替换在这种情况下使用Spock测试框架的优势是什么?也许我应该删除它并且只...

Lint认为Kotlin MutableMap.forEach()为java.util.Map.forEach()【代码】

我在我的Android项目中使用Kotlin的MutableMap.并尝试每个项目做一些动作.所以这是我的代码.private val uris: MutableMap<String, Uri> = mutableMapOf() // ... Fill the items here ... uris.forEach {val ref = FirebaseFirestore.getInstanse().referenceuploadFile(ref, it.value) }一切都在运行时正常工作,但我的CI构建失败,下面的lint错误:MyActivity.kt:142: Error: Call requires API level 24 (current min is 16): ja...

java – 使用Kotlin和lambda返回接口实现【代码】

我有这个简单的界面:interface ValidationBehavior {fun onValidated() }此接口用于类的一个函数:private enum class BehaviorEnum {IDLE,NAVIGATEBACK }private fun getBehavior(payloadBehavior: String) : ValidationBehavior {when(BehaviorEnum.valueOf(payloadBehavior)) {BehaviorEnum.IDLE -> return object: ValidationBehavior {override fun onValidated() {// do some stuff}}} }我的问题是:有没有办法用lambda简化...

java – Kotlin循环与不规则的步骤【代码】

我一直在尝试将Java表达式转换为Kotlin,它产生了这个序列:1,2,4,8,16,32,64这是Java代码:for(int i = 1; i < 100; i = i + i) {System.out.printf("%d,", i); }我发现将其翻译成Kotlin的唯一方法是:var i = 1 while (i < 100) {print("$i,")i += i }我试图使用步骤表达式,但这似乎不起作用.有没有办法在Kotlin中更优雅地表达这种类型的序列? 我知道你可以使用Kotlin Java 9获得这样的代码:Stream.iterate(1, { it <= 100 }) {...

javascript – Kotlin中的平台常见类是什么?【代码】

我想用Kotlin定义客户端和服务器之间的接口. 目前,Kotlin可用于3个平台:Java,Android,Web(JS). 我可以在所有这些平台上使用哪些Kotlin内置类? 我希望在kotlin-stdlib和kotlin-stdlib-js之间有一些共同的库依赖,但找不到一个. 另一方面,我设法创建了可在所有3个平台上使用的以下界面:interface SomeApi {fun update(params: Collection<String>) }那么,除了Collection之外,我怎样才能找出可以在所有平台上使用的内容?解决方法:您...

android – 在Kotlin Lambda中调用RxJava Single【代码】

我正在尝试修补新的Room库与RxJava配对. 我找到了一种方法来使用Single在后台线程上插入项目,如活动内部:Single.fromCallable { AppDatabase.getInMemoryDatabase(this).taskDao().insertAll(task) }.subscribeOn(Schedulers.newThread()).subscribe()现在,我有一个RecyclerView,其任务有一个复选框,您可以使用该复选框将项目标记为完成或不完整.我想要做的是每次选中/取消选中时更新项目.我将粘贴整个ViewHolder以完成,但请特别注...

android – Kotlin Coroutines – 嵌套协同程序是在一个协同程序中处理不同线程的正确方法吗?【代码】

我正在尝试使用协程而不是RxJava在基本的网络调用上第一次看到它是什么样的,并遇到滞后/线程的一些问题 在下面的代码中,我正在进行网络调用userRepo.Login(),如果发生异常,我会显示错误消息并停止我在函数开始时启动的进度动画. 如果我将所有内容保留在CommonPool上(或者不添加任何池),它会崩溃,如果发生异常,则必须在looper线程上完成动画.在其他情况下,我收到错误,说这必须在UI线程上完成,同样的问题,不同的线程要求. 我无法在UI...

java – 尝试使用monad for kotlin

Java 8没有提供Try monad.这对于功能样式中的异常处理很有用. kotlin有没有现成的实现?或者我应该实施一个?解决方法:不幸的是,在Kotlin标准库中没有Try monad.我只是在学习FP,但我认为sealed class是你自己实现尝试monad所需要的.还有一些图书馆:Result和funKTionale. UPD. 2018年2月 现在funKTionale和Kategory合并到arrow库,其中有Try monad.

android – Kotlin并行协同程序【代码】

从单独的协同程序保存多个作业实例是否可以接受.假设我想要同时运行几个协同程序,它们是无关的,不能在一个协同程序中发生,但我希望它们并行运行.在Android中我应该保存作业实例,以便我可以在onDestroy方法中取消作业.将每个工作单独保存在列表中还是打破某种规则是可以接受的.我知道在RX他们有订阅为什么在Kotlin Coroutines中没有相同的东西?val jobList = arrayListOf<Job>()fun startJob1() {jobList.add(launch {//do some wo...

java – Kotlin投影冗余【代码】

在阅读关于Kotlin泛型类型方差和投影的内容时,我想出了一个完全不熟悉的概念.有人可以解释一下作者想要解释的想法是什么?请来自Kotlin in Action,MEAP的这句话:There is no sense to get an out projection of a type parameter that already has out variance, such as List<out T>. That would mean the same as List<T>, because List is declared as class List<out T>. The Kotlin compiler will warn that such a projecti...

从kotlin引用时,Java文件的未解析引用具有不同的风格【代码】

问题: 这个问题很可能已经从所有其他类似的问题中得到了回答,但我似乎无法让它发挥作用. >如果我从主源集中的java文件引用另一种风格(不同的源集)中的特定java文件,它就可以工作.>如果我尝试从主源集中的Kotlin文件引用同一个文件,则会抱怨它无法看到它(“未解析的引用”).>如果我将同一个文件移动到主源设置它可以工作(所以它不是文件本身).>如果我将Java文件转换为Kotlin它可以工作(这是我目前的解决方案),但我想知道它为什么不...

javascript – 如何在Kotlin中定义全局js函数?【代码】

我在KotlinJs项目中创建的每个函数和变量都进入了一个模块.但我需要在全球范围内定义一些功能. 我使用p5js库(纯js).它允许用户在全局范围内定义事件处理函数.我正在尝试在这个项目中使用KotlinJS.但我不知道如何创建全局函数来处理p5js的事件.我所有的Kotlin函数都在模块内部.要调用我的Kotlin代码,我需要指定全名mymodule.draw() 目前,我必须使用全局函数创建一个额外的纯JS代码层,将执行转换为kotlin函数,如下所示:function set...

java – kotlin错误的可空性推论没有任何泛型【代码】

在春天mvc(5.1.3)我试图做:val url : String? = null val matcher: ResultMatcher = MockMvcResultMatchers.forwardedUrl(url)我得到第二行的编译错误. 来自intellij(kotlinc-jvm 1.3.11):Error:(230, 56) Kotlin: Null can not be a value of a non-null type String或者从gradle(kotlin 1.2.71):Type mismatch: inferred type is String? but String was expectedspring方法的java源代码是:/*** Asserts the request was for...

java – Kotlin委托未来【代码】

我正在努力学习Kotlin,代表们既有趣又令人困惑.我有一种情况,在java类中,我将采用构造函数arg,创建一个Future(ID表示另一个系统中的资源)并将Future存储为instange变量.然后“getXXX”将调用Future.get() 这是一个示例java类public class Example {private Future<Foo> foo;public Example(String fooId) {this.foo = supplyAsync(() -> httpClient.get(fooId));}public Foo getFoo() {return foo.get();} }我没有提供Kotlin示例,因...

如何在java中调用kotlin代码

1,包级别的函数All the functions and properties declared in a file example.kt inside a package org.foo.bar, including extension functions, are compiled into static methods of a Java class named org.foo.bar.ExampleKt// example.kt package democlass Foofun bar() { ... }对应的java操作// Java new demo.Foo(); demo.ExampleKt.bar();如果想给转换后的java类指定类名,可以用 @JvmName :@file:JvmName("DemoUtils")...

Java失宠,谷歌宣布Kotlin现在是安卓开发的首选语言

在昨天凌晨的Google I/O 大会上,Google 官方正式宣布,Kotlin 编程语言现在是 Android 应用程序开发人员的首选语言。Java 占据 Android 开发绝对统治的时代一去不复返了。  Kotlin,东宫太子  谷歌昨天宣布,Kotlin 编程语言现在是 Android 应用程序开发人员的首选语言。  谷歌在今天的声明中写道:“Android 的开发将越来越以 Kotlin 为先。” 许多新的 Jetpack API 和特性将首先在 Kotlin 中提供。如果你要开始一个新项...

kotlin 使用aop插件aspectjx踩坑之路(防止按钮重复点击)【代码】

前言 在我的上一篇博文Android处理按钮重复点击事件中,介绍了AOP切面编程处理按钮的重复点击问题,最近在学习kotlin,基于kotlin也是使用java的,所以也想在kotlin写一个,也就有了以下的踩坑之路。 使用方法: 1.引入Aspectj 在项目根目录下的build.gradle中,添加依赖classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.4' 在app或其他module目录下的build.gradle中,添加以下代码:apply plugin: 'com.hujia...

Kotlin每个Android应用程序开发人员必须知道的功能【图】

Java被认为是Android操作系统的核心,因此,对于每个Android开发人员来说,除了Java之外几乎没有其他选择。好吧,最后,Java的一个极好的替代品已经出现了很多价值。Kotlin是一种编程语言,是Java开发的更好,更有效的替代方案。 此时此刻,Android社区对Kotlin的讨论充满了热情。这正是我们要解释Kotlin的五个关键特征的原因。Kotlin优于Java的优势 由JetBrains设计和开发的Kotlin已经解决了Java的一系列缺点。虽然Java不会很快消...

在已有的Java项目中使用Kotlin【图】

需要配置两个地方首先在项目点gradle文件中引入Kotlin插件 然后在module的build.gradle文件中应用插件

Android java项目中引用kotlin,混合开发工程配置【代码】【图】

https://www.jianshu.com/p/9220227cdfb3 buildscript {ext.kotlin_version = 1.2.71repositories {google()jcenter()}dependencies {//classpath com.android.tools.build:gradle:3.1.0-alpha09classpath com.android.tools.build:gradle:3.2.1classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"// NOTE: Do not place your application dependencies here; they belong// in the individual module build.g...

android查询天气demo,基于mvp+kotlin+rxjava2+room+retrofit2 (一)

前言 本文用于记录整个demo学习、开发的过程 一、key point1.使用主流框架:mvp+kotlin+rxjava2+room+retrofit2 2.简结的ui/ux 3.第三方api的使用https://www.sojson.com/blog/305.html 4.定期自动更新天气数据